Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用属性AndroidTextAppearance与属性样式时的继承问题_Android_Android Layout_Android Styles - Fatal编程技术网

使用属性AndroidTextAppearance与属性样式时的继承问题

使用属性AndroidTextAppearance与属性样式时的继承问题,android,android-layout,android-styles,Android,Android Layout,Android Styles,我有一个根主题和一个继承子主题: <resources> <color name="colorRed">#FF0000</color> <color name="colorGreen">#00FF00</color> <style name="Root" parent="Theme.AppCompat.Light.DarkActionBar" /> <style name="Root

我有一个根主题和一个继承子主题:

<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> 
  • 预期:绿色文本
  • 实际:红色文本

Root.TextAppearance
如何继承红色?

您应该设置样式而不是TextAppearance

style="@style/Root.TextAppearance"
此外,在styles 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

Android有不同类型的层次结构。使用
样式
属性时,样式层次结构将按预期应用。假设
styles
层次结构也适用于
android:textAppearance
属性,显然失败了

主题还有另一个层次结构。该层次结构沿着布局树向下延伸。主题
子项
应用于清单中,是顶层

似乎这个顶级主题的设置甚至在较低的级别上否决了
android:textAppearance
的设置。这仍然是错误的,因为较低的级别通常会覆盖较高的级别

因此,我通过应用属性
style
android:theme
android:textapperance
来进行一些测试,以找出它们的优势顺序

结果表明,
tex外观
最弱,
风格
最强:

  • style
  • android:theme
  • android:textAppearance

  • 我认为这就是为什么较高级别的
    主题可以覆盖较低级别的
    android:textAppearance
    的原因。我承认我发现
    textAppearance
    的低优先级相当令人困惑。这不是我期望的工作方式。然而,这就是我在测试中发现的结果。

    事实!当我使用样式时,它起作用并且只起作用。很遗憾,我不能使用textAppearance来修改样式。给我一些时间来选择所有传入答案中最好的。这个确实有用,但并不完全令人满意。我破坏了我的主题概念,这在很大程度上取决于通过文本外观修改样式的选项。@Blcknx我已经编辑了答案。它不起作用,因为您的TextAppearance样式没有父项。所以它无法从中继承textColor属性。谢谢@TibiG。我试过了。它不会改变结果。我仍然认为这是一个错误。它不会继承textColor属性,因为我会覆盖它。它确实继承了其他五个属性,我没有使用。@Blcknx似乎是合法的:)谢谢,但这不是原因。我将un PUSIONE放入一个文件中,以保持测试用例最简单。这里还提到了优先级顺序:
        <color name="colorRed">#FF0000</color>
    <color name="colorGreen">#00FF00</color>
    
            android:textAppearance="@style/Root.TextAppearance"