2014-10-18 125 views
26

我以前用actionBarStyle更改了AppCompat状态栏的颜色,并用背景创建了一个我想要的颜色。更改材质设计AppCompat ActionBar颜色

现在,使用Material Design AppCompat,此方法不再有效。

你能帮我吗?谢谢。

+0

你可能指的是动作条?只是为了清楚意味着什么。 – 2014-10-18 02:26:34

+0

@NikolaDespotoski我有一个ActionBarActivity必须得到AppCompat风格。所以,我所做的就是向AppCompat样式添加一个名为actionBarStyle的属性,并且我在那里设置的样式具有将Action条变为另一种颜色的背景。 – user3184899 2014-10-18 02:30:50

+0

@NikolaDespotoski有帮助吗? – user3184899 2014-10-18 19:26:11

回答

90

有一个新属性,称为colorPrimary,你可以在你的主题中定义。这会给你ActionBar或工具栏一个纯色。

下面一个小例子:

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <!-- colorPrimary is used for the default action bar background --> 
    <item name="colorPrimary">@color/my_action_bar_color</item> 
</style> 

请注意:它必须是唯一的colorPrimary,不android:colorPrimary,在每一个价值观文件夹除了values-v21之一。

您可以在developer.android.com上阅读更多关于自定义调色板的信息。

+1

颜色主要用于Api 20+。在奇巧上时,这对我来说毫无用处。 – 2014-10-19 14:51:01

+8

不是。 'colorPrimary'是'v7-appcompat'的一部分,所以它基本上可用于API-Level 7及更高版本(请注意父'Theme.AppCompat')。 – reVerse 2014-10-19 15:02:28

+1

它的工作!谢谢! – user3184899 2014-10-19 15:13:34

3

在我的情况下,@reVerse有一个部分答案。为了让colorPrimary正常工作,我不得不做一些额外的修改,因为我正在自定义工具栏的其他部分......特别是文本颜色。

这是我的工作styles.xml文件,与表明的意见我在做什么错:

<!-- As @reVerse mentioned, you need to use colorPrimary instead of android:colorPrimary --> 
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/my_toolbar_color</item> 
</style> 

<!-- I was incorrectly using @style/Theme.AppCompat.Light for the popupTheme attribute --> 
<style name="MyToolbarStyle" parent="Widget.AppCompat.ActionBar"> 
    <item name="theme">@style/MyToolbarTextStyle</item> 
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item> 
</style> 

<!-- I was incorrectly using Them.AppCompat.Light for the parent here --> 
<style name="MyToolbarTextStyle" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> 
    <item name="android:textColorPrimary">@color/my_toolbar_text_color</item> 
</style> 

因此,定制比工具栏背景颜色更多的时候,你需要确保使用的一个ThemeOverlay主题,无论出于何种原因,colorPrimary都将被忽略。

为了完整起见,这里是我用我的工具栏布局文件,Toolbar.xml:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schmeas.android.com/apk/res-auto" 
    style="@style/MyToolbarStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

希望这可以帮助别人!

0
<style name="AppTheme" parent="Theme.AppCompat.Light"> 

     <item name="colorPrimary">@color/ColorPrimary</item> 
     <item name="colorPrimaryDark">@color/ColorPrimaryDark</item> 
     <!-- Customize your theme here. --> 
    </style> 

另请参见:Making Custom ActionBar

0

directions in the documentation设置应用栏建议您在设定的主题在Android清单文件是这样的:

<application 
    android:theme="@style/Theme.AppCompat.Light.NoActionBar" 
    /> 

然而,在我的经验,这凌驾于定制AppTheme的colorPrimary风格。什么工作对我来说是定义自定义主题是这样的:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

然后在AndroidManifest文件中使用这个主题。

<application 
    android:theme="@style/AppTheme" 
    /> 

后基于colorPrimary活动,设置工具栏背景颜色的罚款。

<android.support.v7.widget.Toolbar 
    android:id="@+id/my_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

(设置ThemeOverlay与黑暗的主题,确保该文本是光。)