2017-07-19 1 views
2

スタイルで設定した場合、textColorプロパティが無視される理由はありますか? XMLでAndroid:textColorはアンドロイドで無視されました:TextTextの外観

<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> 

設定のスタイル:

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

何らかの理由で、デフォルトのテーマのコントロールカラーはこのスタイルで上書きされていません。

私は色を設定することができていますか唯一の方法は、EditTexttextColorプロパティを設定することである(これは私が欲しいものではありません):

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

注意、問題なくTextView作品のために作成さtextColorでカスタムtextAppearance

EditTextandroid.support.v7.widget.AppCompatEditTextまたはandroid.support.design.widget.TextInputEditTextに置き換えようとしましたが、結果は同じでした。まだ動かない。だから問題はEditTextの実装ではありません。

同じ問題で質問が見つかりましたWhy is textColor in android:textAppearance ignored?残念ながら、答えなし。質問で説明したように、スタイルが作成されたときにtextAppearancetextColorを無視している理由

答えて

2

どこかに沿って、textColorの間違った/デフォルト値が選択されて適用されています。 XMLにのandroid:textColor="@null"を設定すると、android:textAppearanceで定義したandroid:textColorを使用することができます。

+0

私はこの魂がこの単純なことを期待していませんでした。ありがとうございました! – matoni

0

はまだわかりませんが、私は誰かがそれが役に立つかもしれませんので、スタイルを経由してtextColorを設定する方法を別の方法を発見したと思います。

私はカスタムテーマを作成し、驚くほど働いた editTextColorプロパティ、設定しようとしましたので、私は EditText色で遊んでいた

:あなたが持っているこの瞬間

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

<!-- 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> 

設定のテーマをカスタム"@style/EditTextAppearance"および"@style/EditTextTheme"

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

をこの方法で、あなたは自分のEditTextにのみテーマを設定する必要があります:良いことは、あなたが次のように"@style/EditTextTheme"「@スタイル/ EditTextTheme」をマージすることができ、ある

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

現在のソリューションはほぼ完璧ですが、textColorがtextAppearanceスタイルに設定されている場合は、より良いでしょう。editTextColorをテーマから削除し、@style/EditTextAppearanceに設定されたtextColorプロパティで置き換えようとしました。

<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> 

textAppearanceに含まれている。この方法textColorは最終的に適用されます!

関連する問題