将android colorPrimary(app bar)更改为渐变颜色

时间:2016-01-08 18:48:06

标签: java android xml gradient

我需要将应用栏上的颜色更改为某种渐变颜色。我在drawable文件夹中创建了action_bar_bg.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="90"
        android:centerColor="@color/colorPrimaryDark"
        android:endColor="@color/colorPrimary"
        android:startColor="@color/colorPrimary" />
</shape>

我尝试在styles.xml中更改colorPrimary:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->

    <item name="colorPrimary">@drawable/action_bar_bg</item>

</style>

但它不起作用。我收到错误:android.content.res.Resources$NotFoundException: File res/drawable/action_bar_bg.xml from color state list resource ID #0x7f020046) 我想达到这个结果:
app bar with gradient

我需要更改代码吗?

2 个答案:

答案 0 :(得分:2)

尝试这种方式。 有一个名为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>

请注意:除了值-v21之外,每个values-folder中都必须只有colorPrimary,而不是android:colorPrimary。

您可以在Android

上阅读有关自定义调色板的更多信息

答案 1 :(得分:0)

在您的活动中的onCreate中执行此操作

ActionBar bar = getActionBar();
Drawable gradient = getResources().getDrawable( R.drawable.action_bar_bg);
bar.setBackgroundDrawable(gradient);