Mettre la couleur du curseur EditText

j'ai ce problème où j'utilise le thème Holo de L'Android sur un projet de tablette. Cependant, j'ai un fragment sur l'écran qui a un fond blanc. J'ajoute un composant EditText sur ce fragment. J'ai essayé de contourner le thème en plaçant le fond du Holo.La lumière du thème de ressources. Cependant, mon curseur texte (carat) reste blanc et donc invisible à l'écran (je peux le repérer légèrement 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 de l'EditText "@android:style/Widget.Holo.Light.EditText" , sans résultat positif.

429
demandé sur Jonik 2011-08-30 07:43:52

15 réponses

le fait de définir l'attribut android:textCursorDrawable à @null devrait se traduire par l'utilisation de android:textColor comme couleur du curseur.

Attribut "textCursorDrawable" est disponible dans l'API de niveau 12, et plus

964
répondu Dean 2015-01-28 09:11:14

Dans La Mise En Page

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

puis créer XML dessiner: 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.

359
répondu star18bit 2018-02-24 20:00:48

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

dans votre EditText , utilisez la propriété:

android:textCursorDrawable="@drawable/black_cursor"

et ajouter le tirant 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 la façon de créer des curseurs plus divers, Si vous avez besoin.

50
répondu Zach-M 2014-10-31 10:38:36

il y a une nouvelle façon de changer la couleur du curseur dans le dernier Appcompact v21

Il suffit de changer colorAccent dans le style comme ceci:

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

alors appliquez ce style sur votre thème d'application ou vos activités.

mise à jour : cette façon ne fonctionne que sur API 21+

Maj 2 : Je ne suis pas sûr de la version android minimum qu'il peut fonctionner.

testé par la version android:

2.3.7 - didn't work
4.4.4 - worked
5.0 - worked
5.1 - worked
40
répondu R4j 2016-01-08 02:52:31

j'ai trouvé la réponse:)

j'ai mis le style editText du thème à:

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

J'ai utilisé le dessin suivant pour régler 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
répondu dineth 2012-10-11 11:27:28

pour tous ceux qui ont besoin de régler dynamiquement la couleur du curseur EditText , vous trouverez ci-dessous deux façons d'y parvenir.


tout D'abord, créez votre curseur tirant:

<?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 le curseur de l'id de la ressource que vous avez créée (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) {
    }
}
24
répondu Jared Rummler 2016-01-08 13:49:25

la Fin de la partie,Ici, c'est ma réponse,

c'est pour les gens qui sont pas cherchant à changer le colorAccent dans leur thème parent,mais veut changer EditText attributs!

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

  1. en Bas de la ligne de couleur
  2. Couleur du curseur
  3. couleur de pointeur de curseur (I utilisé mon image personnalisée).......... de EditText en utilisant le style appliqué au thème D'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éer un drawable ( edit_text_background ) ajouter une ressource xml pour le fond!Vous pouvez personnaliser comme vous le souhaitez!

<?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 comme vous avez mis ce style dans votre thème D'activité.

exemple:

dans votre activité vous avez un thème,mettez ce thème personnalisé editText à cela.

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

puis créer 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
répondu influx 2017-01-06 18:09:29

pour moi j'ai modifié à la fois L'Appthème et une valeur couleurs.xml

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

Voici les couleurs.xml

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

j'ai sorti l'attribut android:textCursorDrawable De @null que j'ai placé dans le style editText. Quand j'ai essayé de l'utiliser, les couleurs ne changeaient pas.

6
répondu Emily Alexandra Conroyd 2016-02-22 16:53:22

Wow je suis vraiment en retard à cette fête mais elle a eu de l'activité il y a 17 jours Il seam nous devons envisager de poster quelle version D'Android nous utilisons pour une réponse afin de Maintenant cette réponse fonctionne avec Android 2.1 et au-dessus Aller à RES / valeurs / STYLES et ajouter les lignes de code ci-dessous et votre curseur sera Noir

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

vous aurez besoin de cette ligne de code dans votre dossier RES / COLOR""

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

pourquoi poster Si tard ? Il pourrait être nice à considérer une certaine forme de catégories pour les nombreux Androïde monstre à la tête est devenu!

4
répondu Grendel 2017-08-27 00:39:53

editcolor.xml

android:textCursorDrawable="@drawable/editcolor"

dans le code de couleur de l'ensemble de fichier xml de edittext couleur de fond

3
répondu Avnish Titoriya 2017-04-28 06:45:51

c'est encore plus facile que ça.

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

cela fonctionne dans ICS et au-delà. Je ne l'ai pas testé dans d'autres versions.

1
répondu Clark Will Battle 2013-06-11 23:05:30

utiliser ce

android:textCursorDrawable="@couleur/blanc"

1
répondu Mohammed Alzoubi 2017-08-09 11:40:22

La seule réponse valable devrait être de modifier le thème de l'activité: <item name="colorAccent">#000000</item> Vous ne devez pas utiliser le android:textCursorDrawable à @null parce que cela ne concerne que le curseur lui-même mais pas le pin sous le curseur si vous voulez faire glisser ce curseur. La solution de thématisation est la plus sérieuse.

1
répondu JPhi Denis 2017-10-16 12:05:31

<!-- 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 la couleur de colorAccent dans les styles.xm, c'est tout simple

0
répondu Abhishek Saini 2016-08-25 14:26:14