Question Définir la couleur du curseur EditText


J'ai ce problème où j'utilise le thème Holo d'Android sur un projet de tablette. Cependant, j'ai un fragment sur l'écran qui a un fond blanc. J'ajoute un EditText composant sur ce fragment. J'ai essayé de passer outre le thème en définissant le contexte des ressources du thème Holo.Light. Cependant, mon curseur texte (carat) reste blanc et donc invisible à l'écran (je peux le repérer faiblement dans le champ edittext ..).

Est-ce que quelqu'un sait comment je peux obtenir EditText pour utiliser une couleur de curseur plus sombre? J'ai essayé de définir le style du EditText pour "@android:style/Widget.Holo.Light.EditText" sans résultat positif.


412
2017-08-30 03:43


origine


Réponses:


Réglage de la android:textCursorDrawable attribuer à @null devrait entraîner l'utilisation de android:textColor comme la couleur du curseur.

L'attribut "textCursorDrawable" est disponible dans l'API niveau 12 et supérieur


946
2018-02-06 18:29



Dans la mise en page

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

Ensuite, créez un fichier XML pouvant être dessiné: 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>

Vous avez un curseur de couleur blanche sur la propriété EditText.


337
2018-03-15 11:22



Il semble que toutes les réponses tournent autour des buissons.

Dans ton EditText, utilisez la propriété:

android:textCursorDrawable="@drawable/black_cursor"

et ajouter le dessinable black_cursor.xml à vos ressources, comme suit:

<?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>

C'est aussi le moyen de créer des curseurs plus diversifiés, si vous en avez besoin.


48
2018-05-28 19:59



Il y a une nouvelle façon de changer la couleur du curseur dans la dernière Appcompact v21
Changez juste colorAccent dans un style comme celui-ci:

 <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>

Appliquez ensuite ce style sur le thème ou les activités de votre application.

Mettre à jour: de cette façon ne fonctionne que sur API 21+  
Mise à jour 2: Je ne suis pas sûr de la version Android minimale qui peut fonctionner.
 Testé par la version Android:

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

38
2018-03-20 02:53



J'ai trouvé la réponse :)

J'ai défini le style editText du thème pour:

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

Ensuite, j'ai utilisé le dessin suivant pour définir le curseur:

`

<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 est la clé ici.


36
2017-08-30 03:57



Pour quiconque a besoin de définir le EditText couleur du curseur dynamiquement, vous trouverez ci-dessous deux moyens d'y parvenir.


Tout d'abord, créez votre curseur drawable:

<?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>

Définissez l'ID de ressource pouvant être tiré par curseur sur le retraitable que vous avez créé (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) {
}

Pour changer simplement la couleur du curseur par défaut, vous pouvez utiliser la méthode suivante:

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) {
    }
}

23
2017-09-09 08:47



Tard à la fête, Voici ma réponse,

Ceci est pour les gens qui sont ne pas cherche à changer le colorAccent dans leur thème parent, mais veut changer EditText les attributs!

Cette réponse démo comment changer ......

  1. Couleur de la ligne inférieure
  2. Couleur du curseur
  3. Couleur du pointeur du curseur (j'ai utilisé mon image personnalisée) .......... EditText utilisant le style appliqué au thème Activité.

enter image description here

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

Exemple:

<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>

Maintenant, créez un dessin (edit_text_background) ajouter une ressource xml pour le fond! Vous pouvez personnaliser comme vous voulez!

<?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>

Maintenant que vous avez défini ce style dans votre thème d'activité.

Exemple : 

Dans votre activité, vous avez un thème, définissez cette coutume editText thème à cela.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Your Theme data -->
    <item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this
</style>

9
2018-02-02 00:48