TabLayout 图标色调 更改其他活动 Actionbar 图标色调
TabLayout Icon Tint Changing Other Activities Actionbar Icon Tint
我有一个带有图标的 TabLayout,这些图标使用 textColorPrimary 主题属性进行着色以匹配主题(浅色或深色)。但是,当我将这种颜色应用于 MainActivity 中的 TabLayout 图标时,来自不同 activity 的工具栏图标也会发生变化。
屏幕截图显示 TabLayout 中的图标颜色与 activity 中的图标颜色相匹配。但是 activity 图标应该是白色的。
TabLayout 图标:
单独的 Activity 工具栏图标
设置 TabLayout 图标和文本颜色的代码:
ColorStateList colors;
if (Build.VERSION.SDK_INT >= 23) {
colors = getResources().getColorStateList(color.tablayout_icon_colors, getTheme());
}
else {
colors = getResources().getColorStateList(color.tablayout_icon_colors);
}
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
Drawable tabicon = tab.getIcon();
CharSequence tabtitle = tab.getText();
LinearLayout tabLayout2 = (LinearLayout)((ViewGroup) tabLayout.getChildAt(0)).getChildAt(tab.getPosition());
TextView tabTextView = (TextView) tabLayout2.getChildAt(1);
if (tabicon != null) {
tabicon = DrawableCompat.wrap(tabicon);
DrawableCompat.setTintList(tabicon, colors);
}
if (tabtitle != null) {
tabTextView.setTextColor(colors);
}
}
tablayout_icon_colors.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorAccent"
android:state_selected="true" />
<item android:color="?android:attr/textColorPrimary" />
</selector>
我在单独的 Activity 中用来扩充菜单的是这样的:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.preview, menu);
return true;
}
您可以使用以下代码更改后退箭头图标的颜色;
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:textColorSecondary">@color/your_color_name</item>
</style>
您可以在工具栏中使用主题。
<android.support.v7.widget.Toolbar
android:theme="@style/myToolbarTheme"
...
>
然后在你的主题中你可以定义colorControlNormal属性:
<style name="myToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
....
<item name="colorControlNormal">@color/myColor</item>
问题在于,在 TabLayout 中用作示例的图标与另一个 activity 中的图标是相同的可绘制图标,并且在应用色调时,它应用于可绘制图标而不是只是 TabLayout 中图标的视图。
解决方法是简单地使用我实际想要的 TabLayout 图标(与 activity 中使用的箭头和保存图标不同的图标)。这样 activity 的可绘制图标就不会受到影响。我有点傻但是嗯。
我有一个带有图标的 TabLayout,这些图标使用 textColorPrimary 主题属性进行着色以匹配主题(浅色或深色)。但是,当我将这种颜色应用于 MainActivity 中的 TabLayout 图标时,来自不同 activity 的工具栏图标也会发生变化。
屏幕截图显示 TabLayout 中的图标颜色与 activity 中的图标颜色相匹配。但是 activity 图标应该是白色的。
TabLayout 图标:
单独的 Activity 工具栏图标
设置 TabLayout 图标和文本颜色的代码:
ColorStateList colors;
if (Build.VERSION.SDK_INT >= 23) {
colors = getResources().getColorStateList(color.tablayout_icon_colors, getTheme());
}
else {
colors = getResources().getColorStateList(color.tablayout_icon_colors);
}
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
Drawable tabicon = tab.getIcon();
CharSequence tabtitle = tab.getText();
LinearLayout tabLayout2 = (LinearLayout)((ViewGroup) tabLayout.getChildAt(0)).getChildAt(tab.getPosition());
TextView tabTextView = (TextView) tabLayout2.getChildAt(1);
if (tabicon != null) {
tabicon = DrawableCompat.wrap(tabicon);
DrawableCompat.setTintList(tabicon, colors);
}
if (tabtitle != null) {
tabTextView.setTextColor(colors);
}
}
tablayout_icon_colors.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorAccent"
android:state_selected="true" />
<item android:color="?android:attr/textColorPrimary" />
</selector>
我在单独的 Activity 中用来扩充菜单的是这样的:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.preview, menu);
return true;
}
您可以使用以下代码更改后退箭头图标的颜色;
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:textColorSecondary">@color/your_color_name</item>
</style>
您可以在工具栏中使用主题。
<android.support.v7.widget.Toolbar
android:theme="@style/myToolbarTheme"
...
>
然后在你的主题中你可以定义colorControlNormal属性:
<style name="myToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
....
<item name="colorControlNormal">@color/myColor</item>
问题在于,在 TabLayout 中用作示例的图标与另一个 activity 中的图标是相同的可绘制图标,并且在应用色调时,它应用于可绘制图标而不是只是 TabLayout 中图标的视图。
解决方法是简单地使用我实际想要的 TabLayout 图标(与 activity 中使用的箭头和保存图标不同的图标)。这样 activity 的可绘制图标就不会受到影响。我有点傻但是嗯。