以编程方式更改 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
而不是 style
。 theme
应用于 Toolbar
中的每个 child,在本例中包括 TextView
标题背景和设置按钮背景。 style
旨在用于视图级别,并且只会应用于您的 Toolbar
背景。
之前
<android.support.v7.widget.Toolbar
...
android:theme="@style/LocationBar" />
之后
<android.support.v7.widget.Toolbar
...
style="@style/LocationBar" />
我遇到了一个问题,即更改支持 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
而不是 style
。 theme
应用于 Toolbar
中的每个 child,在本例中包括 TextView
标题背景和设置按钮背景。 style
旨在用于视图级别,并且只会应用于您的 Toolbar
背景。
之前
<android.support.v7.widget.Toolbar
...
android:theme="@style/LocationBar" />
之后
<android.support.v7.widget.Toolbar
...
style="@style/LocationBar" />