使用 属性 androidTextapperance 与 属性 样式时的继承问题
Inheritance issue, when using property androidTextapperance vs. property style
我有一个根主题和一个继承子主题:
<resources>
<color name="colorRed">#FF0000</color>
<color name="colorGreen">#00FF00</color>
<style name="Root" parent="Theme.AppCompat.Light.DarkActionBar" />
<style name="Root.TextAppearance" parent="android:TextAppearance">
<item name="android:textColor">@color/colorGreen</item>
</style>
<style name="Child" parent="Root">
<item name="android:textColor">@color/colorRed</item>
</style>
</resources>
在清单文件中我设置了主题Child
。在布局中,我应用根主题中的文本外观:
<TextView
android:textAppearance="@style/Root.TextAppearance"
android:text="Hello World!"
- 预期:绿色文本
- 实际:红色文字
Root.TextAppearance
如何继承红色?
您应该设置样式而不是 textAppearance
style="@style/Root.TextAppearance"
同样在样式中 Root.TextAppearance 应该将 Root 作为父级
<style Root.TextAppearance parent="android:TextAppearance">
比设置 android:textAppearance="@style/Root.TextAppearance" 应该有效
进行一些更改将颜色代码放入 color.xml
<color name="colorRed">#FF0000</color>
<color name="colorGreen">#00FF00</color>
然后试试这个..
android:textAppearance="@style/Root.TextAppearance"
检查优先顺序
对该问题的简短回答是,主题优先于 android:textAppearance
。
Android 有不同类型的层次结构。使用 styles
属性时,样式层次结构按预期应用。假设styles
层级也申请android:textAppearance
属性显然失败了
主题还有另一个层次结构。该层次结构遵循布局树。主题 Child
应用在清单中,是顶层。
似乎这个顶级主题的设置甚至否决了较低级别的 android:textAppearance
的设置。这仍然感觉不对,因为较低级别通常应该覆盖较高级别。
所以我通过应用属性 style
、android:theme
和 android:textAppearannce
进行了一些测试,以找出它们的强度顺序。
原来texAppearance
最弱,style
最强:
style
android:theme
android:textAppearance
我认为这就是为什么更高级别的 theme
可以覆盖较低级别的 android:textAppearance
的原因。我承认我发现 textAppearance
的低优先级相当混乱。这不是我预期的工作方式。然而,这就是我发现正在测试的结果。
我有一个根主题和一个继承子主题:
<resources>
<color name="colorRed">#FF0000</color>
<color name="colorGreen">#00FF00</color>
<style name="Root" parent="Theme.AppCompat.Light.DarkActionBar" />
<style name="Root.TextAppearance" parent="android:TextAppearance">
<item name="android:textColor">@color/colorGreen</item>
</style>
<style name="Child" parent="Root">
<item name="android:textColor">@color/colorRed</item>
</style>
</resources>
在清单文件中我设置了主题Child
。在布局中,我应用根主题中的文本外观:
<TextView
android:textAppearance="@style/Root.TextAppearance"
android:text="Hello World!"
- 预期:绿色文本
- 实际:红色文字
Root.TextAppearance
如何继承红色?
您应该设置样式而不是 textAppearance
style="@style/Root.TextAppearance"
同样在样式中 Root.TextAppearance 应该将 Root 作为父级
<style Root.TextAppearance parent="android:TextAppearance">
比设置 android:textAppearance="@style/Root.TextAppearance" 应该有效
进行一些更改将颜色代码放入 color.xml
<color name="colorRed">#FF0000</color>
<color name="colorGreen">#00FF00</color>
然后试试这个..
android:textAppearance="@style/Root.TextAppearance"
检查优先顺序
对该问题的简短回答是,主题优先于 android:textAppearance
。
Android 有不同类型的层次结构。使用 styles
属性时,样式层次结构按预期应用。假设styles
层级也申请android:textAppearance
属性显然失败了
主题还有另一个层次结构。该层次结构遵循布局树。主题 Child
应用在清单中,是顶层。
似乎这个顶级主题的设置甚至否决了较低级别的 android:textAppearance
的设置。这仍然感觉不对,因为较低级别通常应该覆盖较高级别。
所以我通过应用属性 style
、android:theme
和 android:textAppearannce
进行了一些测试,以找出它们的强度顺序。
原来texAppearance
最弱,style
最强:
style
android:theme
android:textAppearance
我认为这就是为什么更高级别的 theme
可以覆盖较低级别的 android:textAppearance
的原因。我承认我发现 textAppearance
的低优先级相当混乱。这不是我预期的工作方式。然而,这就是我发现正在测试的结果。