AppCompat 21: name = colorPrimary与name = actionBarStyle无法一起使用

4

当我使用 actionBarStyle 时,colorPrimary 并不能将颜色设置为红色。 如果我删除 actionBarStyle,它就能正常工作。如何修改代码以显示颜色?

<resources>

    <style name="AppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/MyStyledActionBar</item>
        <item name="colorPrimary">@color/red</item>
    </style>

    <style name="MyStyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
        <item name="titleTextStyle">@style/MyActionBarTitleText</item>
    </style>

    <style name="MyActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/white</item>
    </style>

</resources>

我不需要使用Widget,只需在清单文件中设置包含colorPrimary的应用程序主题即可。 - Suragch
1个回答

6
< p > < code > Widget.AppCompat.Light.ActionBar 的根是 Base.Widget.AppCompat.ActionBar,它不应用背景属性。

<style name="Base.Widget.AppCompat.ActionBar" parent="">
    ...
    <item name="background">@null</item>
    <item name="backgroundStacked">@null</item>
    <item name="backgroundSplit">@null</item>
    ...
</style>

你的父级应该是 Widget.AppCompat.Light.ActionBar.Solid,这样你就可以从 Base.Widget.AppCompat.Light.ActionBar.Solid 继承属性,它应用了背景属性。
<style name="Base.Widget.AppCompat.Light.ActionBar.Solid">
    <item name="background">?attr/colorPrimary</item>
    <item name="backgroundStacked">?attr/colorPrimary</item>
    <item name="backgroundSplit">?attr/colorPrimary</item>
</style>

或者,您可以自己应用背景属性。

<style name="MyStyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/MyActionBarTitleText</item>
    <item name="background">?attr/colorPrimary</item>
</style>

1
非常深入的见解性回答。+1 - Andrew Gallasch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接