cambiar el color del cursor del texto de edición

5 minutos de lectura

avatar de usuario
Además

como puedo cambiar EditText's color del cursor programáticamente?

En Android 4.0 y superior, color del cursor es blanco. y si EditTextEl fondo también es blanco, se vuelve invisible.

avatar de usuario
usuario370305

En sus propiedades EditText, hay un atributo android:textCursorDrawable

Ahora configúralo en @nulo me gusta,

android:textCursorDrawable="@null"

Así que ahora su EditText Cursor es el mismo que su EditText TextColor.

Referencia Desde Establecer el color del cursor EditText

  • Lo necesito programáticamente, no basado en xml

    – Además

    25 de julio de 2012 a las 12:24

  • @Adem, si configura esto en el XML, puede configurar cualquier color programáticamente como el color del texto.

    – usuario363349

    23 de abril de 2013 a las 15:02

  • Esto tampoco funciona para la pregunta formulada, que es cómo configurarlo. programáticamente.

    – Adrián

    2 oct 2013 a las 11:40

  • El OP quiere hacerlo por código y no por diseños xml, por lo que esta no es la respuesta correcta.

    – Jono

    28 de mayo de 2015 a las 10:28

  • @user370305 esto hace que el cursor se vea muy delgado y casi invisible

    – Dipanshu Awasthi

    18 de enero de 2017 a las 9:43

avatar de usuario
Además

Encontré una manera de arreglar esto. No es la mejor solución, pero funciona.

Desafortunadamente, solo puedo usar color estático para el color del cursor.

Primero, defino un cursor negro en dibujable

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

A continuación, defino un EditText de muestra en los diseños.

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

Cuando quiero crear un EditText en tiempo de ejecución, uso esto:

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

Ahora tiene una vista EditText que tiene un cursor negro. Tal vez alguien pueda mejorar mi solución para que el cursor se pueda cambiar en tiempo de ejecución.

  • ¡Gran trabajo, gracias! Funciona de maravilla para el componente EditText personalizado.

    – Buzos

    26 de marzo de 2014 a las 11:44

avatar de usuario
Jared Rummler

Aquí está, lo que creo, una mejor solución que la que publicó @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>

avatar de usuario
kc ochibili

mejorando la respuesta de Jared Rummler

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.custom_cursor);
} catch (Exception ignored) {
}

crear custom_cursor.xml en la carpeta res/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>

XML:

<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textCursorDrawable="@drawable/custom_cursor"
     >
</EditText>

Qué pasa con la styles.xml usando AppCompat-v7?

<item name="colorControlNormal">@color/accentColor</item>
<item name="colorControlActivated">@color/accentColor</item>
<item name="colorControlHighlight">@color/accentColor</item>

Funciona para mí (este ejemplo es simplista).

  • ¿Se aplican estos acentos a los cursores de EditText en los dispositivos anteriores a Lollipop?

    –Anthony Chuinard

    20 mayo 2015 a las 22:15

  • No, luego toma el cursor del sistema predeterminado (lamentablemente). Desde entonces se han publicado buenas respuestas, mucho más completas.

    – Shkschneider

    21 de mayo de 2015 a las 8:05

avatar de usuario
V-rund Puro-hit

Puede configurar el android:textCursorDrawable atribuir a @null que resultará en el uso de android:textColor como el color del cursor.

Atributo textCursorDrawable está disponible en el nivel API 12 y superior…

Gracias…

  • ¿Se aplican estos acentos a los cursores de EditText en los dispositivos anteriores a Lollipop?

    –Anthony Chuinard

    20 mayo 2015 a las 22:15

  • No, luego toma el cursor del sistema predeterminado (lamentablemente). Desde entonces se han publicado buenas respuestas, mucho más completas.

    – Shkschneider

    21 de mayo de 2015 a las 8:05

avatar de usuario
Rakesh Yadav

Establecer a través de AppTheme

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. -->
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:spinnerStyle">@style/spinner_style</item>
    <!--Add This-->
    <item name="editTextStyle">@style/EdittextStyle</item>
    <item name="android:dropDownListViewStyle">@style/SpinnerStyle</item>
</style>

<!--New EditText Style-->
<style name="EdittextStyle" parent="Widget.AppCompat.EditText">
    <item name="android:background">?attr/editTextBackground</item>
    <item name="android:textColor">?attr/editTextColor</item>
    <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
    <!--<item name="android:textCursorDrawable">@drawable/abc_text_cursor_material</item>-->
    <item name="colorControlNormal">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorAccent</item>

</style>

¿Ha sido útil esta solución?