以编程方式更改 supportActionBar 的颜色

Changing the color of a supportActionBar programmatically

我遇到了一个问题,即更改支持 ActionBar 的可绘制背景会更改大部分栏的颜色,但会在文本和图标周围保留旧颜色。我试过更改支持 ActionBar 和我用来制作它的 ToolBar 的颜色。我尝试了很多使 UI 元素无效的方法。我已经厌倦了设置颜色和文本是不同的顺序。我试过隐藏和显示文本。我只是不能让它变成一种纯色。

这是我的 ActionBar 样式:

<style name="LocationBar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:textColorPrimary">@color/text_color_primary_inverse</item>
    <item name="android:textColorSecondary">@color/text_color_primary_inverse</item>
    <item name="android:background">@color/weather_cool</item>
</style>

这就是我将它添加到我的 activity:

的方式
<android.support.v7.widget.Toolbar
    android:id="@+id/location_bar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:theme="@style/LocationBar"/>

这在Java代码中我将它设置为supportActionBar:

_locationBar = (Toolbar)findViewById(R.id.location_bar);
setSupportActionBar(_locationBar);

然后在获取天气后,我尝试像这样调整颜色:

ColorDrawable warmDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.weather_warm));
getSupportActionBar().setBackgroundDrawable(warmDrawable);

这就是您在图片中看到的结果。大部分条形图都会改变颜色,但不是全部。

在你的activityclass中编写代码如下。

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#004D40")));

这会将背景颜色更改为 #004D40

...changing the background drawable of the support ActionBar changes the color of most of the bar but leaves the old color around the text and icons...

发生这种情况的原因是您使用的是 android:theme 而不是 styletheme 应用于 Toolbar 中的每个 child,在本例中包括 TextView 标题背景和设置按钮背景。 style 旨在用于视图级别,并且只会应用于您的 Toolbar 背景。

之前

<android.support.v7.widget.Toolbar
    ...
    android:theme="@style/LocationBar" />

之后

<android.support.v7.widget.Toolbar
    ...
    style="@style/LocationBar" />