Establecer el color del cursor EditText

9 minutos de lectura

Establecer el color del cursor
cena

Tengo este problema en el que uso el tema Holo de Android en un proyecto de tableta. Sin embargo, tengo un fragmento en pantalla que tiene un fondo blanco. estoy agregando un EditText componente de este fragmento. Intenté anular el tema configurando el fondo de los recursos del tema Holo.Light. Sin embargo, mi cursor de texto (carat) permanece blanco y, por lo tanto, invisible en la pantalla (puedo detectarlo débilmente en el campo de edición de texto …).

¿Alguien sabe cómo puedo hacer que EditText use un color de cursor más oscuro? He intentado establecer el estilo de EditText en "@android:style/Widget.Holo.Light.EditText" sin resultado positivo.

Establecer el color del cursor
Decano

Configuración de la android:textCursorDrawable atribuir a @null debe resultar en el uso de android:textColor como el color del cursor.

El atributo “textCursorDrawable” está disponible en el nivel de API 12 y superior

  • ¡Oh hombre, eso es MUCHO más eficiente que conjurar un dibujable para que el cursor sea negro! Me encanta Android hasta la muerte, pero este es un comportamiento predeterminado tan increíblemente malo… alguien realmente necesita ser golpeado por ello.

    – Yevgueni Simkin

    13 de marzo de 2012 a las 21:14

  • android 3.2 y superior .. apesta

    – Blundell

    21 de mayo de 2012 a las 8:40

  • Aunque si tu target > 3.2 en su manifiesto, puede usarlo y se ignorará para versiones inferiores

    – Blundell

    8 de agosto de 2012 a las 8:07

  • Parece usar el color de la sugerencia en su lugar si lo configura. Al menos en 4.2. La opción de cursor no tiene problemas para mí desde 2.3.3-4.4

    – Mince Man

    07/12/2013 a las 18:25


  • Esto no funciona en las versiones más recientes de Android. En su lugar, muestra un cursor gris y se mete con la funcionalidad de resaltado. Use la respuesta de @ star18bit en su lugar.

    – Mateo Bahr

    29/06/2017 a las 18:30

1646760851 520 Establecer el color del cursor
DPP

En Diseño

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

Luego crea un xml dibujable: 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>

Tiene un cursor de color blanco en la propiedad EditText.

  • El atributo “textCursorDrawable” solo se usa en el nivel de API 12 y superior

    – SBotirov

    30 de septiembre de 2014 a las 5:50

  • Esta es la respuesta correcta. No estoy seguro de por qué tantas personas piensan que establecer el cursor en “@null” parece una buena idea

    –Greg Ennis

    19 mayo 2015 a las 12:32


  • respuesta anterior, establezca textCursorDrawable como @null los resultados se ven bien, pero la orientación del cursor no tiene sentido, sin embargo, esta respuesta funciona realmente bien. Realmente gracias

    – iroiroys

    22 de junio de 2016 a las 6:04

  • Esta es la mejor solución.

    – Antonio Sérgio Ferraz

    24 de marzo de 2019 a las 13:50

  • podemos controlar el ancho del cursor usando esta solución, pero @null lo hace muy delgado

    – Raúl Gaur

    3 de julio de 2021 a las 16:44

1646760852 884 Establecer el color del cursor
Zach-M

Parece como si todas las respuestas andaran por los arbustos.

En tus EditTextusa la propiedad:

android:textCursorDrawable="@drawable/black_cursor"

y agrega el dibujable black_cursor.xml a sus recursos, de la siguiente manera:

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

Esta es también la forma de crear cursores más diversos, si es necesario.

  • Esto no funciona en Android 4.2 Jelly Bean… El cursor desaparece, @null es el camino a seguir.

    – Édgar

    14 de enero de 2013 a las 12:17

  • @Edgar Esto parece funcionar para mí en 4.2 JB muy bien en el nivel de temas.

    – mkuech

    30 de marzo de 2013 a las 9:32

  • Android 4.2.2 funciona bien. No olvide agregar en black_cursor.xml

    – Andrei Aulaska

    13 de mayo de 2013 a las 7:38


  • El atributo “textCursorDrawable” solo se usa en el nivel de API 12 y superior

    – SBotirov

    30 de septiembre de 2014 a las 5:49


Establecer el color del cursor
ductrán

Hay una nueva forma de cambiar el color del cursor en la última Appcompact v21
solo cambia colorAccent en estilo como este:

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

Luego aplique este estilo en el tema o las actividades de su aplicación.

Actualizar: de esta manera solo funciona en API 21+
Actualización 2: No estoy seguro de la versión mínima de Android que pueda funcionar.
Probado por la versión de Android:

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

Establecer el color del cursor
cena

Encontré la respuesta 🙂

Configuré el estilo editText del tema en:

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

Luego he usado el siguiente dibujable para establecer el cursor:

`

<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 es la clave aquí.

  • stackoverflow.com/questions/2658772/android-vertical-line-xml podría ser útil para cualquiera que desee hacer un cursor dibujable que sea solo una línea vertical 🙂

    – Andrew Wyld

    15 de noviembre de 2011 a las 11:43

  • ¿Puede decirnos cómo podemos configurar el color del cursor mediante programación?

    – Anil MH

    7 febrero 2014 a las 10:25

  • Tuve un problema cuando nombré el artículo android:editTextStylepero cambiándolo a editTextStyle arreglado. Consulte stackoverflow.com/a/34010235/6744473

    – zapato

    14 de junio de 2018 a las 12:13

1646760854 392 Establecer el color del cursor
pevik

Para cualquier persona que necesite configurar el EditText color del cursor de forma dinámica, a continuación encontrará dos formas de lograrlo.


Primero, crea tu cursor 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>

Establezca la identificación del recurso dibujable del cursor en el dibujable que creó (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) {
}

Para simplemente cambiar el color del cursor predeterminado dibujable, puede usar el siguiente método:

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

  • stackoverflow.com/questions/2658772/android-vertical-line-xml podría ser útil para cualquiera que desee hacer un cursor dibujable que sea solo una línea vertical 🙂

    – Andrew Wyld

    15 de noviembre de 2011 a las 11:43

  • ¿Puede decirnos cómo podemos configurar el color del cursor mediante programación?

    – Anil MH

    7 febrero 2014 a las 10:25

  • Tuve un problema cuando nombré el artículo android:editTextStylepero cambiándolo a editTextStyle arreglado. Consulte stackoverflow.com/a/34010235/6744473

    – zapato

    14 de junio de 2018 a las 12:13

Tarde a la fiesta, aquí está mi respuesta,

Esto es para las personas que están no buscando cambiar el colorAccent en su tema principal, pero quiere cambiar EditText atributos!

Esta respuesta demuestra cómo cambiar ……

  1. color de fondo
  2. color de los cursores
  3. Color del puntero del cursor (utilicé mi imagen personalizada)………. de EditText usando el estilo aplicado al tema Actividad.

ingrese la descripción de la imagen aquí

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

Ejemplo:

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

Ahora crea un dibujable (edit_text_background) agregue un recurso xml para el fondo. ¡Puede personalizarlo como desee!

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

Ahora, como configuró este estilo en su tema de Actividad.

Ejemplo :

En tu actividad tienes un tema, establece este personalizado editText tema a eso.

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

  • <item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this sin efecto

    – acto262

    12 de abril de 2017 a las 10:29


  • ¿Es AppCompatEditText?

    – Charuක

    13 de abril de 2017 a las 4:43

  • ay me equivoque Escribí mal attr android:editTextSteyle ,el attr derecho es editTextStyle

    – acto262

    13 de abril de 2017 a las 6:02


  • <item name="android:textCursorDrawable">@color/white</item> no funciona

    – Vlad

    18 de octubre de 2017 a las 9:52


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad