88 votes

Définir un style cohérent pour tous les EditText (par exemple)

J'essaie de faire en sorte que tous les EditText dans mon application ont une apparence cohérente. Je sais que je peux faire quelque chose comme ça :

<style name="App_EditTextStyle">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

Je peux alors faire une EditText avoir ce style en faisant cela :

<EditText ...
    style="@style/App_EditTextStyle
    ...>

Mais de cette façon, je dois me rappeler de définir le style individuellement pour chaque EditText dans mon application, ce qui est fastidieux, voire source d'erreurs.

Y a-t-il un moyen de faire en sorte que cela fasse partie d'un thème ou quelque chose du genre ? Cela me permettrait de ne pas avoir à associer ce style à chaque EditText . Quelque chose comme ce bloc de code fictif :

<style name="App_Theme" parent="@android:style/Theme.Holo">
   ... 
   <item name="android:EditTextSyle">@style/App_EditTextStyle</item>
   ...
<style>

Et puis dans mon AndroidManifest.xml J'ai quelque chose comme :

<application
    ....
    android:theme="@style/App_Theme">

Et voilà, tous mes EditText ont un style cohérent sans que je doive spécifier le style pour chaque cas.

168voto

Luksprog Points 52767

Remplacer l'attribut pointant vers le EditText style(nommé editTextStyle :) ) dans votre thème personnalisé :

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="android:editTextStyle">@style/App_EditTextStyle</item>
</style>

et créez votre style personnalisé pour étendre Widget.EditText :

<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

Editer :

Si vous utilisez les thèmes plus récents liés à AppCompat, utilisez l'attribut editTextStyle sans le préfixe Android :

<style name="App_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

56voto

iflp Points 812

La réponse de @Luksprog est correcte mais ne fonctionne pas pour moi. Après quelques expériences, j'ai découvert que la suppression de l'espace de noms Android de editTextStyle me permettait d'obtenir de bons résultats.

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

et créez votre style personnalisé pour étendre Widget.EditText ou si vous utilisez le thème AppCompat Widget.AppCompat.EditText :

<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

18voto

Reynaldo Aguilar Points 1084

Commencez par définir le style de votre EditText. Assurez-vous que le style parent est android:Widget.EditText

<style name="CustomEditTextStyle" parent="android:Widget.EditText">

    <item name="android:textColor">#0F0F0F</item>
    <!-- ... More items here if needed ... -->
</style>

Ensuite, remplacez l'attribut android:editTextStyle dans votre thème personnalisé. Attention, si vous utilisez la bibliothèque de support, vous devrez également remplacer l'attribut editTextStyle (sans l'espace de noms Android).

<style name="App_Theme" parent="...">
   <item name="android:editTextStyle">@style/CustomEditTextStyle</item>
   <item name="editTextStyle">@style/CustomEditTextStyle</item> <!-- For compatibility with the support library -->
</style>

1voto

Phil Blandford Points 6

Si vous avez seulement besoin de définir quelques paramètres simples, comme la couleur du texte, l'espace de noms Android dispose de quelques paramètres qui vous permettront de le faire sans avoir à déclarer un style distinct pour le texte d'édition. Les paramètres suivants ont été définis pour l'espace de noms Android

<style name="MyStyle" parent="android:Theme.Material.NoActionBar">
    <item name="colorPrimary">@color/black</item>
    <item name="colorPrimaryDark">@color/white</item>
    <item name="colorAccent">@color/white</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:editTextColor">@color/black</item>
    <item name="android:editTextBackground">@color/black</item>
    ....
</style>

-1voto

user1700099 Points 74
<style name="App_Theme" parent="@android:style/Theme.Holo">    
    <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
</style>

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