2011-01-03 25 views
39

¿Cómo puedo cambiar el color de enfoque (naranja) en un cuadro de Editar texto? El color de foco es un borde pequeño alrededor de todo el control y es brillante naranja cuando el control tiene foco. ¿Cómo puedo cambiar el color de ese foco a un color diferente? ¿Alguien puede ayudarme a resolver este problema? Gracias de antemano,cómo cambiar el color de foco de EditText en Android

Respuesta

62

Tendrá que crear/modificar su propia imagen de NinePatch para reemplazar la imagen predeterminada y usarla como fondo de su EditText. Si busca en su carpeta SDK, debajo de su plataforma, luego res/drawable, debe encontrar la imagen NinePatch para el estado de enfoque EditText. Si eso es todo lo que desea cambiar, puede simplemente ponerlo en Photoshop, o cualquier software de edición de imágenes que tenga, y cambiar el color naranja al color que elija. A continuación, guarde en la carpeta que estirable, y construir una nueva StateListDrawable, por ejemplo, algo como el siguiente:

edittext_modified_states.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <item 
     android:state_pressed="true" 
     android:drawable="@android:drawable/edittext_pressed" 
     /> <!-- pressed -->  
    <item 
     android:state_focused="true" 
     android:drawable="@drawable/edittext_focused_blue" 
     /> <!-- focused -->  
    <item 
     android:drawable="@android:drawable/edittext_normal" 
     /> <!-- default --> 
</selector> 

no sé improviso los nombres reales de los NinePatches por defecto para EditText, entonces sustitúyalos según sea necesario, pero la clave aquí es simplemente usar las imágenes @android:drawable para las que no ha modificado (o puede copiarlas en la carpeta dibujable de su proyecto), y luego use su drawable modificado para tu estado enfocado

entonces se puede establecer esta StateListDrawable como el fondo para su TextView, así:

<TextView 
    android:background="@drawable/edittext_modified_states" 
+0

¿En qué versión de Android funciona esta solución? Intenté cambiar el color en Android 2.1, pero parece que los nombres y los archivos xml son diferentes. Entiendo la idea, pero la frustración crece a medida que enfrento toneladas de errores todo el tiempo. – zaplec

+0

En 2.1 tuve que copiar también las imágenes normales de estado sin modificar en la carpeta de aplicaciones dibujables para obtener este trabajo. Así que en mi carpeta dibujable de aplicaciones tengo la imagen de estado de enfoque modificada y también otras imágenes de estado originales no modificadas. Ahora funciona. – zaplec

+0

Puede que no funcione, como dije, puede que tenga que copiarlos en su carpeta (como parece que lo hizo); esta fue solo una solución desde lo más alto de mi cabeza. :) – kcoppock

0
<?xml version="1.0" encoding="utf-8"?> 
<selector 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 
    <item 
     android:state_pressed="true" 
     android:color="colorcode" 
    /> <!-- pressed -->  
    <item 
     android:state_focused="true" 
     android:color="colorcode" 
    /> <!-- focused -->  
    <item 
      android:color="colorcode" 
    /> <!-- default --> 
</selector> 
+1

este código no funciona, me muestra este error "02-07 03: 45: 01.131: E/AndroidRuntime (2911): Causado por: org.xmlpull.v1.XmlPullParserException: línea de archivo XML binario # 8: etiqueta requiere un atributo 'dibujable' o una etiqueta secundaria que define un drawable " – andrewww

+0

try' 'en lugar de' android: color' – sent1nel

+0

@andrewww create color.xml in ' carpeta res/color' y prueba 'android: color =" @ color/colorname "' –

0

Usted no necesita crear dibujables XML. Puede ser más simple en el código. Ejemplo en kotlin:

editText.onFocusChangeListener = OnFocusChangeListener { _, hasFocus -> 
    // colorLine, colorLineFocus is vars of ColorStateList 
    ViewCompat.setBackgroundTintList(editText, if (hasFocus) colorLineFocus else colorLine) 
} 
Cuestiones relacionadas