74 votes

changer la couleur du curseur edittext

Comment puis-je changer la couleur du curseur EditText's par programme?

Dans Android 4.0 et les versions ultérieures, la couleur du curseur est blanche. et si le fond EditText s est également blanc, il devient invisible.

122voto

user370305 Points 46287

Dans vos propriétés EditText, il existe un attribut android:textCursorDrawable

Maintenant, réglez-le sur @null comme,

android:textCursorDrawable="@null"

Alors maintenant, votre curseur EditText est identique à votre EditText TextColor.

Référence à partir de la couleur du curseur EditText

30voto

Adem Points 738

J'ai trouvé un moyen de résoudre ce problème. Il n'est pas la meilleure solution, mais il fonctionne.

Malheureusement, je ne peux utiliser la couleur statique pour le curseur de la couleur.

Tout d'abord, je définir un curseur noir dans 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>

Ensuite, j'ai définit un échantillon EditText dans les mises en page.

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textCursorDrawable="@drawable/blackpipe"
         >
    </EditText>

Lorsque je veux créer un EditText au moment de l'exécution, j'utilise ceci:

AttributeSet editText30AttributeSet = null;
int res = getResources().getIdentifier("edit30", "layout", getPackageName());//edit30 is EditText layout
XmlPullParser parser = getResources().getXml(res);
int state=0;
do {
    try {
        state = parser.next();
    } catch (Exception e1) {
        e1.printStackTrace();
    }       
    if (state == XmlPullParser.START_TAG) {
        if (parser.getName().equals("EditText")) {
            editText30AttributeSet = Xml.asAttributeSet(parser);
            break;
        }
    }
} while(state != XmlPullParser.END_DOCUMENT);
EditText view = new EditText(getContext(),editText30AttributeSet);

Maintenant, vous avez un EditText vue qui a un curseur noir. Peut-être quelqu'un peut améliorer ma solution, de sorte que le curseur peut être modifiée lors de l'exécution.

17voto

Jared Rummler Points 661

Voici, à mon avis, une meilleure solution que celle publiée par @Adem.

Java:

     try {
        // https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564
        Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
        f.setAccessible(true);
        f.set(yourEditText, R.drawable.cursor);
    } catch (Exception ignored) {
    }
 

XML:

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

-7voto

Serg_ Points 12

Dans le Manifeste Android, vous pouvez définir un attribut de thème dans la balise d'application. Par exemple, application android: label = "@ string / app_name" android: theme = "@ android: style / Theme.NoTitleBar"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X