AppCompatActivity不使用colorPrimary for Action Bar?

时间:2015-04-26 23:46:49

标签: android android-layout android-activity android-styles

根据https://developer.android.com/training/material/theme.htmlcolorPrimary应设置操作栏颜色。

mainActivity扩展Activity时,这会有效,但当我延伸AppCompatActivity(或现已弃用的ActionBarActivity)时,它会中断。

因此对AppCompatActivity我必须使用:

values/style.xml

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/MaterialTeal800</item>
    <item name="colorPrimary">@color/MaterialTeal500</item>
    <!--<item name="colorPrimaryLight">@color/MaterialLightPrimary</item>-->
    <!--<item name="colorDivider">@color/MaterialDivider</item>-->
    <item name="colorAccent">@color/MaterialDeepOrange500</item>
    <!--<item name="colorAccentPressed">@color/MaterialDeepOrange800</item>-->
</style>
<style name="AppTheme" parent="AppBaseTheme">
    <!-- Customize your theme here. -->
    <item name="android:textColor">@color/black</item>
    <item name="android:textColorSecondary">@color/MaterialSecondary</item>
    <item name="android:textColorPrimary">@color/black</item>
    <item name="actionBarTabTextStyle">@style/TitleText</item>
</style>
<style name="TitleText" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:textColor">@color/white</item>
</style>

正确地为状态栏着色,但 NOT 操作栏。

(对于v21,无论如何)Activity它与

一起使用
 <style name="AppBaseTheme" parent="android:Theme.Material.Light.DarkActionBar">
    <!-- android:Theme.Material.Light.DarkActionBar -->
    <!-- Theme.AppCompat.Light.DarkActionBar -->
    <item name="android:colorPrimaryDark">@color/MaterialTeal800</item>
    <item name="android:colorPrimary">@color/MaterialTeal500</item>
    <!--<item name="android:colorPrimaryLight">@color/MaterialLightPrimary</item>-->
    <item name="android:textColor">@color/black</item>
    <item name="android:actionBarTabTextStyle">@style/TitleText</item>
    <item name="android:textColorSecondary">@color/MaterialSecondary</item>
    <!--<item name="android:colorDivider">@color/MaterialDivider</item>-->
    <item name="android:textColorPrimary">@color/black</item>
    <item name="android:colorAccent">@color/MaterialDeepOrange500</item>
</style>

如果我不使用Activity并使用AppCompatActivity,则会在发布时崩溃,并说:

  

java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代)。

我希望与AppCompatActivity一起使用兼容性,但我无法弄清楚为什么它没有提升颜色(但相同的代码效果很好)与活动 - 我喜欢使用API​​ 21+上的所有新选项。它似乎拿起状态栏似乎是错误的,但我需要手动覆盖操作栏上的自定义样式(a-la this answer)。我一直在挑选和选择吗?没有材质主题或过渡,或向后兼容?

请注意,这是工具栏。这是操作栏 - 我知道我可以在添加的工具栏元素上使用android:background

更新

看起来我可以通过删除v21 AppCompatActivity命名空间让操作栏与android:一起着色,但如果我尝试使用真实的材质主题,仍会出现崩溃......

1 个答案:

答案 0 :(得分:2)

在这里你应该删除app:compat主题的android:前缀,如:

<item name="colorPrimaryDark">@color/MaterialTeal800</item>

并在styles-v21

<item name="android:colorPrimaryDark">@color/MaterialTeal800</item>