web-dev-qa-db-fra.com

Android définir le style de texte de modification globalement dans le thème ne fonctionne pas

Je fais face à un problème. J'essaie de faire en sorte que les textes d'édition de mon application soient identiques à l'aide du thème.
J'ai généré des styles à l'aide d'outils en ligne (images à 9 patchs) et j'ai essayé de les définir dans mon thème comme celui-ci

   <!-- Base application theme. -->
    <style name="DefaultAppTheme" parent="Theme.AppCompat">
        <!-- Main theme colors -->
        <!--   your app branding color for the app bar -->
        <item name="colorPrimary">@color/blue</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="colorPrimaryDark">@color/darkblue</item>
        <!--   theme UI controls like checkboxes and text fields -->
        <item name="colorAccent">@color/cornflowerblue</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="Android:editTextStyle">@style/EditTextDefault</item>
    </style>

Mon style pour éditer le texte

<style name="EditTextDefault" parent="Android:Widget.EditText">
        <item name="Android:background">@drawable/edit_text_holo_light</item>
        <item name="Android:textColor">@color/light_blue</item>
        <item name="Android:layout_marginLeft">@dimen/margin_edit_text_default</item>
        <item name="Android:layout_marginRight">@dimen/margin_edit_text_default</item>
        <item name="Android:layout_marginTop">@dimen/margin_edit_text_default</item>
    </style>

Mais cela ne fonctionne pas si vous utilisez le texte d'édition sans spécifier le style manuellement pour chaque texte d'édition.

Ça ne marche pas

<EditText
    Android:id="@+id/edit_text_login"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@+id/edit_text_password"
    Android:hint="@string/hint_enter_login"
    Android:inputType="textEmailAddress" />

Cela marche

<EditText
    Android:id="@+id/edit_text_login"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@+id/edit_text_password"
    style="@style/EditTextDefault"
    Android:hint="@string/hint_enter_login"
    Android:inputType="textEmailAddress" />

Je sais que les paramètres layout_ * n'affecteront pas s'ils sont utilisés dans le thème, mais d'autres attributs devraient fonctionner.

Veuillez aider avec ce problème.

19
exlwzicx

au lieu de cela..

<item name="Android:editTextStyle">@style/EditTextDefault</item>

utilisez ceci..

<item name="editTextStyle">@style/EditTextDefault</item>
50
Jongz Puangput

Que devrais tu faire

Utilisez ceci @Android:style/Widget.EditText au lieu parent="Android:Widget.EditText". J'espère que cela vous aidera.

Veuillez lire ceci SO Answer Définissez un style cohérent pour tous les EditText

<style name="EditTextDefault" parent="@Android:style/Widget.EditText">
4
IntelliJ Amiya

si vous utilisez appcompat> v22, vous pouvez essayer d'utiliser

<style name="EditText.Colored" parent="Theme.AppCompat">
    <item name="colorControlNormal">@color/colorNormal</item>
    <item name="colorControlActivated">@color/colorActivated</item>
    <item name="colorControlHighlight">@color/colorControlHighlight</item>
</style>

et dans votre layout.xml définissez la propriété Android: theme sur edittext

<EditText
    Android:id="@+id/edit_text_login"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@+id/edit_text_password"
    Android:theme="@style/EditText.Colored"
    Android:hint="@string/hint_enter_login"
    Android:inputType="textEmailAddress" />
4
ingyesid

En plus de corriger la référence au Widget.EditText:

<style name="EditTextDefault" parent="@Android:style/Widget.EditText">

Vous devez créer un "thème" et l'appliquer dans votre manifeste. Comme ça:

<application
    ...
    Android:theme="@Android:style/DefaultAppTheme" >
</application>
2
Jim