wake-up-neo.net

Legen Sie die Farbe des EditText-Cursors fest

Ich habe dieses Problem, bei dem ich das Holo-Thema von Android für ein Tablet-Projekt verwende. Ich habe jedoch ein Fragment auf dem Bildschirm, das einen weißen Hintergrund hat. Ich füge eine EditText-Komponente zu diesem Fragment hinzu. Ich habe versucht, das Design zu überschreiben, indem Sie den Hintergrund der Holo.Light-Theme-Ressourcen festlegen. Mein Textcursor (Karat) bleibt jedoch weiß und daher auf dem Bildschirm unsichtbar (ich kann ihn im Feld edittext schwach 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, ohne ein positives Ergebnis zu erzielen.

452
dineth

Wenn Sie das Android:textCursorDrawable-Attribut auf @null setzen, sollte Android:textColor als Cursorfarbe verwendet werden.

Das Attribut "textCursorDrawable" ist in API-Ebene 12 und höher verfügbar 

1007
Dean

Im Layout 

<EditText  
    Android:layout_width="match_parent" 
    Android:layout_height="wrap_content" 
    Android:textCursorDrawable="@drawable/color_cursor"
    />

Dann erstellen Sie ein zeichnungsfähiges xml: color_cursor

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <size Android:width="3dp" />
    <solid Android:color="#FFFFFF"  />
</shape>

Sie haben einen weißen Farbcursor in der EditText-Eigenschaft. 

389
star18bit

Es scheint, als würden alle Antworten um die Büsche herumgehen.

Verwenden Sie in Ihrer EditText die Eigenschaft: 

Android:textCursorDrawable="@drawable/black_cursor"

und fügen Sie den Zeichencode black_cursor.xml wie folgt zu Ihren Ressourcen hinzu:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" >
    <size Android:width="1dp" />
    <solid Android:color="#000000"/>
</shape>

Auf diese Weise können Sie auch unterschiedlichere Cursor erstellen, wenn Sie dies benötigen.

55
Zach-M

Es gibt eine neue Möglichkeit, die Cursorfarbe in der neuesten Appcompact v21 zu ändern
Ändern Sie einfach colorAccent in einem Stil wie folgt:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette-->

    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">#088FC9</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">#088FC9</item>

    <!-- colorAccent is used as the default value for colorControlActivated
         which is used to tint widgets -->
    <!-- THIS IS WHAT YOU'RE LOOKING FOR -->
    <item name="colorAccent">#0091BC</item> 
</style>

Wenden Sie dann diesen Stil auf Ihr App-Thema oder Ihre Aktivitäten an.

Update : Dieser Weg funktioniert nur mit API 21+ 
Update 2 : Ich bin mir nicht sicher, welche Android-Version mindestens funktionieren kann.
Getestet von Android-Version:

2.3.7 - didn't work
4.4.4 - worked
5.0 - worked
5.1 - worked
40
R4j

Ich habe die Antwort gefunden :)

Ich habe den editText-Stil des Themes auf Folgendes festgelegt:

<item name="Android:editTextStyle">@style/myEditText</item>

Dann habe ich folgendes Zeichen verwendet, um den Cursor zu setzen:

`

<style name="myEditText" parent="@Android:style/Widget.Holo.Light.EditText">
    <item name="Android:background">@Android:drawable/editbox_background_normal</item>
    <item name="Android:textCursorDrawable">@Android:drawable/my_cursor_drawable</item>
    <item name="Android:height">40sp</item>
</style>

`

Android: textCursorDrawable ist hier der Schlüssel.

36
dineth

Für jeden, der die EditText-Cursorfarbe dynamisch einstellen muss, finden Sie unten zwei Möglichkeiten, dies zu erreichen.


Erstellen Sie zuerst Ihren Cursor, der gezeichnet werden kann:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <solid Android:color="#ff000000" />

    <size Android:width="1dp" />

</shape>

Setzen Sie die Ressource-ID für den Cursor auf das von Ihnen erstellte Zeichen (https://github.com/Android/platform_frameworks_base/blob/KitKat-release/core/Java/Android/widget/TextView.Java#L562-564">source) :

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

Um nur die Farbe des Standardcursors zu ändern, können Sie die folgende Methode verwenden:

public static void setCursorDrawableColor(EditText editText, int color) {
    try {
        Field fCursorDrawableRes = 
            TextView.class.getDeclaredField("mCursorDrawableRes");
        fCursorDrawableRes.setAccessible(true);
        int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
        Field fEditor = TextView.class.getDeclaredField("mEditor");
        fEditor.setAccessible(true);
        Object editor = fEditor.get(editText);
        Class<?> clazz = editor.getClass();
        Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
        fCursorDrawable.setAccessible(true);

        Drawable[] drawables = new Drawable[2];
        Resources res = editText.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 ignored) {
    }
}
24
Jared Rummler

Spät zur Party, hier ist meine Antwort, 

Dies ist für die Personen, die nicht die colorAccent in ihrem übergeordneten Thema ändern möchten, jedoch EditText-Attribute ändern möchten!

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

  1. Untere Linienfarbe 
  2. Cursorfarbe 
  3. Cursorzeigerfarbe (ich habe mein benutzerdefiniertes Bild verwendet) .......... von EditText mit einem Stil, der auf das Activity-Design angewendet wird.

 enter image description here

<Android.support.v7.widget.AppCompatEditText
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:text="Hey" />

Beispiel:

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
    <item name="Android:textColor">@color/white</item>
    <item name="Android:textColorHint">#8AFFFFFF</item>
    <item name="Android:background">@drawable/edit_text_background</item> // background (bottom line at this case)
    <item name="Android:textCursorDrawable">@color/white</item>  // Cursor
    <item name="Android:textSelectHandle">@drawable/my_white_icon</item> // For pointer normal state and copy text state
    <item name="Android:textSelectHandleLeft">@drawable/my_white_icon</item>
    <item name="Android:textSelectHandleRight">@drawable/my_white_icon</item>
</style>

Erstellen Sie nun ein Zeichenelement (edit_text_background) und fügen Sie eine Ressourcen-XML für den Hintergrund hinzu. Sie können sie beliebig anpassen.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:bottom="0dp"
        Android:left="-3dp"   
        Android:right="-3dp"
        Android:top="-3dp">

        <shape Android:shape="rectangle">
            <stroke
                Android:width="1dp"
                Android:color="@color/white"/>
        </shape>
    </item>
    </layer-list>

Jetzt haben Sie diesen Stil in Ihrem Aktivitätsdesign festgelegt.

Beispiel: 

Legen Sie in Ihrer Aktivität ein Design fest, und legen Sie dieses benutzerdefinierte editText-Design fest.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Your Theme data -->
    <item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this
</style>
10
Charuක
Edittext cursor color you want changes your color.
   <EditText  
    Android:layout_width="fill_parent" 
    Android:layout_height="wrap_content" 
    Android:textCursorDrawable="@drawable/color_cursor"
    />

Erstellen Sie dann drawalble xml: color_cursor

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <size Android:width="3dp" />
    <solid Android:color="#FFFFFF"  />
</shape>
7
influx

Für mich habe ich sowohl das AppTheme als auch einen Wert colors.xml geändert

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorControlNormal">@color/yellow</item>
    <item name="colorAccent">@color/yellow</item>
</style>

Hier ist die colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#B7EC2A</color>
</resources>

Ich habe das Attribut Android: textCursorDrawable für @null herausgenommen, das ich in den editText-Stil eingefügt habe. Wenn ich es versuchte, würden sich die Farben nicht ändern. 

Wow, ich bin wirklich spät zu dieser Party gekommen, aber vor 17 Tagen hatte es Aktivitäten Es wäre naheliegend, dass wir veröffentlichen müssen, welche Android-Version wir für eine Antwort verwenden, damit diese Antwort ab Android 2.1 und höher funktioniert Gehen Sie zu RES/VALUES/STYLES und fügen Sie die folgenden Codezeilen hinzu. Der Cursor wird schwarz angezeigt

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!--<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">-->
    <!-- Customize your theme here. -->
    <item name="colorControlActivated">@color/color_Black</item>
    <!--Sets COLOR for the Cursor in EditText  -->
</style>

Sie benötigen diese Codezeile in Ihrem RES/COLOR-Ordner 

<color name="color_Black">#000000</color>

Warum so spät posten? Es könnte nett sein, irgendeine Form von Kategorien für die vielen Monster in Betracht zu ziehen, die Android geworden ist! 

4
Grendel

editcolor.xml  

Android:textCursorDrawable="@drawable/editcolor"

In der XML-Datei den Farbcode der Hintergrundfarbe edittext setzen

3
Avnish Titoriya

Die einzig gültige Antwort sollte darin bestehen, das Thema der Aktivität zu ändern: <item name="colorAccent">#000000</item> Sie sollten Android:textCursorDrawable nicht für @null verwenden, da dies nur den Cursor selbst betrifft, nicht jedoch die Nadel unter dem Cursor, wenn Sie diesen Cursor ziehen möchten . Die Theming-Lösung ist die ernsthafteste.

2
JPhi Denis

Hier @Jared Rummler programmatische setCursor Drawable Color () -Version angepasst, um auch auf Android 9 Pie arbeiten.

@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);
    }
}
2
Oliver Jonas

möchten Sie eine bestimmte Farbe, müssen Sie AppCompatEditText und dann den Hintergrund null verwenden 

funktioniert bei mir 

<Android.support.v7.widget.AppCompatEditText
    Android:background="@null"
    Android:textCursorDrawable="@color/cursorColor"/>

Siehe diesen Gist

1
ssdeno

Es ist noch einfacher als das. 

<style name="MyTextStyle">
    <item name="Android:textCursorDrawable">#000000</item>
</style>

Dies funktioniert in ICS und darüber hinaus. Ich habe es nicht in anderen Versionen getestet.

1

benutze das

Android: textCursorDrawable = "@ color/white"

1

Eine andere einfache Lösung wäre, in Ihrem Projektordner zu res> values> colors.xml zu wechseln und den Wert des Farbakzents in die von Ihnen bevorzugte Farbe zu ändern

<color name="colorAccent">#000000</color>

Der obige Code ändert den Cursor in Schwarz.

0
xwaxes

das heißt colorAccent in Android.

gehen Sie zu res -> values ​​-> styles.xml add

<item name="colorAccent">#FFFFFF</item>

wenn nicht vorhanden.

0

<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">#36f0ff</item> <item name="colorPrimaryDark">#007781</item> <item name="colorAccent">#000</item> </style> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

change t he color of colorAccent in styles.xm, that's it simple

0
Abhishek Saini