629 Stimmen

Legen Sie die Farbe des EditText-Cursors fest

Ich habe dieses Problem, bei dem ich das Android-Holo-Design in einem Tablet-Projekt verwende. Auf dem Bildschirm habe ich jedoch ein Fragment mit weißem Hintergrund. Ich füge ein EditText-Element zu diesem Fragment hinzu. Ich habe versucht, das Thema zu überschreiben, indem ich den Hintergrund der Ressourcen des Holo.Light-Themas festlege. Allerdings bleibt mein Textcursor weiß und daher auf dem Bildschirm unsichtbar (ich kann ihn schwach im Texteingabefeld erkennen..).

Weiß jemand, wie ich EditText dazu bringen kann, eine dunklere Cursorfarbe zu verwenden? Ich habe versucht, den Stil des EditText auf "@android:style/Widget.Holo.Light.EditText" zu setzen, aber ohne Erfolg.

2 Stimmen

Verwenden Sie einfach innerhalb Ihres TextEditText - android:textCursorDrawable="@color/your_color_choice"

7voto

Mohammed Alzoubi Punkte 117

Verwenden Sie dies

android:textCursorDrawable="@color/white"

3 Stimmen

Der Cursor verschwindet auf meinem Gerät, daher verwenden Sie ein zeichnbares Objekt anstelle von direktem Festlegen der Farbe.

0 Stimmen

Dies ist nützlich, wenn Sie den Cursor verstecken möchten, wenn Sie sagen, dass Sie wahrscheinlich mehr Stimmen bekommen!

0 Stimmen

Das ist keine geeignete Lösung. Dadurch wird der Cursor vor dem Tippen verschwinden und während des Tippen ist es nicht angemessen zu zeigen, ob wir die Farbe ändern.

6voto

protanvir993 Punkte 2241

Wir können es im Material-Design wie folgt tun:

    ...
    <item name="android:colorControlNormal">#ff0000</item>
    <item name="android:colorControlActivated">#ff0000</item>
    <item name="android:colorControlHighlight">#ff0000</item>
    ...

Und wenn Sie auch die Farben für Kontrollkästchen und Radiobuttons ändern möchten, fügen Sie die folgende Zeile hinzu:

#ff0000

Ich habe es auf Android API 21+ getestet

5voto

Oliver Jonas Punkte 1128

Hier ist die programmatische setCursorDrawableColor()-Version von @Jared Rummler, die auch auf Android 9 Pie funktioniert.

@SuppressWarnings({"JavaReflectionMemberAccess", "deprecation"})
public static void setCursorDrawableColor(EditText editText, int color) {

    try {
        Field cursorDrawableResField = TextView.class.getDeclaredField("mCursorDrawableRes");
        cursorDrawableResField.setAccessible(true);
        int cursorDrawableRes = cursorDrawableResField.getInt(editText);
        Field editorField = TextView.class.getDeclaredField("mEditor");
        editorField.setAccessible(true);
        Object editor = editorField.get(editText);
        Class clazz = editor.getClass();
        Resources res = editText.getContext().getResources();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            Field drawableForCursorField = clazz.getDeclaredField("mDrawableForCursor");
            drawableForCursorField.setAccessible(true);
            Drawable drawable = res.getDrawable(cursorDrawableRes);
            drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawableForCursorField.set(editor, drawable);
        } else {
            Field cursorDrawableField = clazz.getDeclaredField("mCursorDrawable");
            cursorDrawableField.setAccessible(true);
            Drawable[] drawables = new Drawable[2];
            drawables[0] = res.getDrawable(cursorDrawableRes);
            drawables[1] = res.getDrawable(cursorDrawableRes);
            drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            cursorDrawableField.set(editor, drawables);
        }
    } catch (Throwable t) {
        Log.w(TAG, t);
    }
}

1 Stimmen

java.lang.NoSuchFieldException: Kein Feld mDrawableForCursor auf Android 9.

0 Stimmen

Diese Lösung funktioniert nicht mehr. Siehe developer.android.com/about/versions/pie/…

5voto

dave o grady Punkte 690
    <!-- Passen Sie Ihr Thema hier an. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item> -- ändere diesen Wert

Gehen Sie zu styles.xml und ändern Sie den Akzentfarbwert, der sich auf den Cursor im EditText-Feld auswirkt

5voto

JPhi Denis Punkte 347

Die einzige gültige Antwort sollte sein, das Thema der Aktivität zu ändern: #000000 Du solltest nicht das android:textCursorDrawable auf @null setzen, denn das betrifft nur den Cursor selbst und nicht den Pin unter dem Cursor, wenn du diesen Cursor ziehen möchtest. Die Lösung über das Design ist die ernsthafteste.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X