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"

27voto

Jared Rummler Punkte 36806

Für alle, die die EditText-Cursorfarbe dynamisch festlegen müssen, finden Sie unten zwei Möglichkeiten, dies zu erreichen.


Erstellen Sie zunächst Ihr Cursor-Zeichen:

Weisen Sie die Ressourcen-ID des Cursorzeichens dem von Ihnen erstellten Drawable zu (Quelle)):

try {
    Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
    f.setAccessible(true);
    f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored) {
}

Um nur die Farbe des Standard-Cursor-Zeichens zu ändern, können Sie die folgende Methode verwenden:

    public static void setTextCursorColor(TextView textView, @ColorInt int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            final Drawable drawable = textView.getTextCursorDrawable();
            drawable.setTint(color);
            textView.setTextCursorDrawable(drawable);
        } else try {
            Field fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
            fCursorDrawableRes.setAccessible(true);
            int   mCursorDrawableRes = fCursorDrawableRes.getInt(textView);
            Field fEditor            = TextView.class.getDeclaredField("mEditor");
            fEditor.setAccessible(true);
            Object   editor          = fEditor.get(textView);
            Class clazz           = editor.getClass();
            Field    fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
            fCursorDrawable.setAccessible(true);

            Drawable[] drawables = new Drawable[2];
            Resources  res       = textView.getContext().getResources();
            drawables[0] = res.getDrawable(mCursorDrawableRes);
            drawables[1] = res.getDrawable(mCursorDrawableRes);
            drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            fCursorDrawable.set(editor, drawables);
        } catch (final Throwable throwable) {
            if (DEBUG) throw new RuntimeException("can't set text cursor color", throwable);
        }
    }

0 Stimmen

Es stört mich wirklich, dass das funktioniert. AppCompatEditText hat bereits setSupportBackgroundTintList, so wäre es nicht relativ einfach, etwas ähnliches wie setSupportCursorTintList hinzuzufügen?

6 Stimmen

@Jared Rummler, Ihre Lösung hat für den Cursor funktioniert, aber der Tropfen, der unter dem Cursor erscheint (wenn Sie den Text auswählen, erscheinen zwei davon), ist immer noch in der Originalfarbe. Können Sie mir dabei helfen?

2 Stimmen

Ihr 3. Ansatz hat in Android 9 nicht funktioniert, aber für Versionen darunter hat es funktioniert.

13voto

Charuක Punkte 12790

Zu spät zur Party, hier ist meine Antwort,

Dies ist für die Leute, die nicht die colorAccent in ihrem Eltern-Theme ändern wollen, aber die EditText-Attribute ändern möchten!

Diese Antwort zeigt, wie man ...... ändern kann

  1. Farbe der unteren Linie
  2. Cursorfarbe
  3. Cursor-Zeigerfarbe (Ich habe mein benutzerdefiniertes Bild verwendet)......... von EditText mit dem im Aktivitäts-Theme angewendeten Stil.

Gib eine Bildbeschreibung hier ein

Beispiel:

    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">#8AFFFFFF</item>
    <item name="android:background">@drawable/edit_text_background</item> // Hintergrund (untere Linie in diesem Fall)
    <item name="android:textCursorDrawable">@color/white</item>  // Cursor
    <item name="android:textSelectHandle">@drawable/my_white_icon</item> // Für den Zeiger im normalen Zustand und im Textkopierzustand
    <item name="android:textSelectHandleLeft">@drawable/my_white_icon</item>
    <item name="android:textSelectHandleRight">@drawable/my_white_icon</item>

Jetzt erstellen Sie ein drawable (edit_text_background) und fügen Sie eine Ressourcen-XML für den Hintergrund hinzu! Sie können es nach Ihren Wünschen anpassen!

Jetzt, wie Sie diesen Stil in Ihrem Aktivitäts-Theme gesetzt haben.

Beispiel :

In Ihrer Aktivität haben Sie ein Theme, setzen Sie dieses benutzerdefinierte editText Thema darauf.

    <!-- Ihre Theme-Daten -->
    <item name="editTextStyle">@style/AppTheme.EditText</item> // Dies inkludieren

0 Stimmen

@style/AppTheme.EditText // hinzufügen keine Wirkung

0 Stimmen

Ist es AppCompatEditText?

1 Stimmen

Oh, ich liege falsch. Ich habe das falsche Attribut android:editTextSteyle geschrieben, das richtige Attribut ist editTextStyle

10voto

Vector Punkte 2758

Wow, ich bin wirklich spät zu dieser Party, aber es gab vor 17 Tagen Aktivitäten. Es scheint, dass wir für eine Antwort in Betracht ziehen müssen, welche Android-Version wir verwenden, also funktioniert diese Antwort jetzt mit Android 2.1 und höher. Gehen Sie zu RES/VALUES/STYLES und fügen Sie die untenstehenden Zeilen Code hinzu und Ihr Cursor wird schwarz.

    <!--<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">-->
    <!-- Passen Sie Ihr Theme hier an. -->
    <item name="colorControlActivated">@color/color_Black</item>
    <!-- Setzt die FARBE des Cursors im EditText -->

Sie benötigen eine Zeile Code in Ihrem RES/COLOR-Ordner.

#000000

Warum so spät posten? Es wäre vielleicht schön, über eine Art von Kategorien für das viele-Köpfige Monster nachzudenken, zu dem Android geworden ist!

0 Stimmen

Attribut erfordert API-Level 21, nicht 7 (2.1)

9voto

Mani Punkte 901
Die Farbe des Edittext-Cursors ändern Sie durch Änderung Ihrer Farbe.

Dann erstellen Sie die XML-Datei color_cursor

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.

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