当textColor
属性通过自定义textAppearance
样式设置时,是否有任何理由被忽略?
<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>
以XML格式设置样式:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/EditTextAppearance"
/>
由于某种原因,此样式不会覆盖默认主题控件颜色。
我能够设置颜色的唯一方法是在textColor
中设置EditText
属性(但这不是我想要的):
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/EditTextAppearance"
android:textColor="@color/blue"
/>
注意,为textAppearance
创建textColor
的自定义TextView
可以正常运行。
我尝试将EditText
替换为android.support.v7.widget.AppCompatEditText
或android.support.design.widget.TextInputEditText
,但结果是相同的。还是行不通。所以问题不在EditText
实施中。
我发现了同样问题的问题Why is textColor in android:textAppearance ignored?。不幸的是,没有回答。
答案 0 :(得分:10)
沿线的某处,正在拾取并应用textColor
的错误/默认值。您可以通过在android:textColor
的XML中设置android:textAppearance
来强制使用您在android:textColor="@null"
中定义的EditText
。
答案 1 :(得分:0)
仍然不知道为什么textAppearance
在创建样式时会忽略textColor
,但我认为我已找到另一种方式如何通过样式设置textColor
,所以有人可能觉得它很有用。
我正在使用EditText
颜色,因此我创建了自定义主题并尝试设置editTextColor
属性,这令人惊讶地工作:
<!-- 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>
设定主题:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/EditTextAppearance"
android:theme="@style/EditTextTheme"
/>
此时您有自定义"@style/EditTextAppearance"
和"@style/EditTextTheme"
。好的是,您可以合并 "@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
中设置主题:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/EditTextTheme"
/>
目前的解决方案几乎是完美的,但如果在textAppearance风格中设置textColor
会更好,所以我尝试从主题中删除editTextColor
并将其替换为{{1}在textAppearance样式textColor
中设置属性。
@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>
中包含的textColor
最终会被应用!
答案 2 :(得分:0)
android:textColor
在 android:textAppearance
的 EditText
中被忽略,因为 android:editTextColor
属性总是覆盖 EditText
的文本颜色(不要问我为什么,它是关于疯狂的机器人).
但是如果您将此属性添加到主题中,一切正常:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:editTextColor">@null</item>
</style>