40 votes

Comment changer la couleur du focus d'un EditText dans Android ?

Comment puis-je changer la couleur de la mise au point (orange) sur un site Web de l EditText boîte ?

La couleur de mise au point est un petit cercle autour du contrôle entier et est brillante. orange vif lorsque la commande est mise au point. Comment puis-je changer la couleur de ce à une couleur différente ?

64voto

kcoppock Points 57219

Vous devrez créer/modifier votre propre image NinePatch pour remplacer celle par défaut, et l'utiliser comme arrière-plan de votre EditText. Si vous regardez dans votre dossier SDK, sous votre plate-forme, puis res/drawable, vous devriez trouver l'image NinePatch pour l'état de focus de l'EditText. Si c'est tout ce que vous voulez changer, vous pouvez simplement l'ouvrir dans Photoshop, ou tout autre logiciel d'édition d'images dont vous disposez, et changer la couleur orange en une couleur de votre choix. Ensuite, enregistrez-la dans votre dossier drawable et créez un nouveau StateListDrawable, par exemple quelque chose comme ci-dessous :

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>

Je ne connais pas les noms réels des NinePatches par défaut pour l'EditText, alors remplacez-les si nécessaire, mais l'essentiel ici est d'utiliser simplement la fonction @android:drawable pour celles que vous n'avez pas modifiées (ou vous pouvez les copier dans le dossier drawable de votre projet), puis utilisez votre drawable modifié pour votre état focalisé.

Vous pouvez ensuite définir ce StateListDrawable comme arrière-plan de votre TextView, comme suit :

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

0 votes

Sur quelle version d'Android cette solution fonctionne-t-elle ? J'ai essayé de changer la couleur dans Android 2.1, mais il semble que les noms et les fichiers xml y soient différents. Je comprends l'idée, mais la frustration grandit car je suis confronté à des tonnes d'erreurs en permanence.

0 votes

Dans la version 2.1, j'ai dû copier également les images d'état normales non modifiées dans le dossier "applications drawable" pour que cela fonctionne. Ainsi, dans mon dossier applications drawable, j'ai l'image modifiée de l'état du focus et aussi les images originales non modifiées des autres états. Maintenant cela fonctionne.

0 votes

Il se peut que cela ne fonctionne pas, comme je l'ai dit, il se peut que vous deviez les copier dans votre dossier (comme il semble que vous l'ayez fait) ; c'est juste une solution qui me vient à l'esprit :)

2voto

comm1x Points 1070

Vous n'avez pas besoin de créer des fichiers xml. Cela peut être plus simple en code. Exemple en kotlin :

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

0voto

Ketan Ahir Points 3751
<?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 votes

Ce code ne fonctionne pas et me montre cette erreur "02-07 03:45:01.131 : E/AndroidRuntime(2911) : Causé par : org.xmlpull.v1.XmlPullParserException : Binary XML file line #8 : <item> tag requires a 'drawable' attribute or child tag defining a drawable ".

0 votes

Essayez <item drawable="@color/colorcode"> au lieu de android:color

0 votes

@andrewww créer color.xml en res/color et essayez android:color="@color/colorname"

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