2017-07-19 1 views
2

Y at-il une raison pour laquelle la propriété textColor est ignorée lorsqu'elle est définie via le style personnalisé textAppearance?Android: textColor ignoré dans android: textAppearance de l'EditText

<style name="EditTextAppearance" parent="@android:style/TextAppearance.Widget.EditText"> 
    <item name="android:fontFamily">sans-serif-medium</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textColor">@color/blue</item> <!-- IGNORED --> 
</style> 

style en XML Réglage:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="@style/EditTextAppearance" 
    /> 

Pour une raison quelconque, la couleur de contrôle du thème par défaut n'est pas remplacée par ce style.

La seule façon que je suis en mesure de définir la couleur est en définissant textColor propriété EditText (mais ce n'est pas ce que je veux):

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="@style/EditTextAppearance" 
    android:textColor="@color/blue" 
    /> 

Remarque, la coutume textAppearance avec textColor créé pour TextView fonctionne sans problème .

J'ai essayé de remplacer EditText par android.support.v7.widget.AppCompatEditText ou android.support.design.widget.TextInputEditText mais le résultat était le même. Ne fonctionne toujours pas. Donc, le problème n'est pas dans l'implémentation EditText.

J'ai trouvé la question avec le même problème Why is textColor in android:textAppearance ignored?. Malheureusement, sans réponse.

Répondre

2

Quelque part le long de la ligne, la valeur incorrecte/par défaut pour textColor est en train d'être prise en compte et appliquée. Vous pouvez forcer le android:textColor que vous définissez dans android:textAppearance à être utilisé en définissant android:textColor="@null" dans votre fichier XML pour EditText.

+0

Je ne m'attendais pas à ce que soultion puisse être aussi simple. Je vous remercie! – matoni

0

ne sais toujours pas pourquoi textAppearance ignorer textColor lorsque le style est créé comme décrit en question, mais je pense que je l'ai trouvé une autre façon comment définir textColor par style, donc quelqu'un pourrait trouver utile.

Je jouais avec EditText couleurs donc j'ai créé thème personnalisé et essayé de définir editTextColor propriété, qui a travaillé de façon surprenante:

<!-- consider to extend application theme over default "Base.V7.Widget.AppCompat.EditText" to achieve consistent look and feel --> 
<style name="EditTextTheme" parent="Base.V7.Widget.AppCompat.EditText"> 
    <item name="colorControlNormal">@color...</item> <!-- underline color --> 
    <item name="colorControlActivated">@color...</item> <!-- underline color on focus --> 
    <item name="editTextColor">@color/blue</item> <!-- ACCEPTED --> 
</style> 

thème Cadre:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="@style/EditTextAppearance" 
    android:theme="@style/EditTextTheme" 
    /> 

En ce moment, vous avez personnalisé "@style/EditTextAppearance" et "@style/EditTextTheme". La bonne chose est que vous pouvez fusionner "style @/EditTextTheme" dans le "@style/EditTextTheme" comme suit:

<style name="EditTextTheme" parent="Base.V7.Widget.AppCompat.EditText"> 
    ... 
    <item name="editTextColor">@color/blue</item> 
    <item name="editTextStyle">@style/EditTextAppearance</item> 
</style> 

De cette façon, il vous suffit de définir le thème que dans votre EditText:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/EditTextTheme" 
    /> 

La solution actuelle est presque parfaite, mais il serait préférable, si textColor sera défini dans le style textAppearance, donc j'ai essayé de supprimer editTextColor du thème et le remplacer par la propriété textColor définie dans le style textAppearance @style/EditTextAppearance.

<style name="EditTextAppearance" parent="@android:style/TextAppearance.Widget.EditText"> 
    <item name="android:fontFamily">sans-serif-medium</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textColor">@color/blue</item> <!-- APPLIED if appearance is part of the theme --> 
</style> 

<style name="EditTextTheme" parent="Base.V7.Widget.AppCompat.EditText"> 
    <item name="colorControlNormal">@color...</item> 
    <item name="colorControlActivated">@color...</item> 
    <item name="editTextStyle">@style/EditTextAppearance</item> 
</style> 

De cette façon textColor contenue dans textAppearance est finalement appliquée!