我有一个TabLayout,其中的图标使用textColorPrimary主题属性着色以匹配主题(浅色或深色)。但是当我将此颜色色调应用于我的MainActivity中的TabLayout图标时,来自不同活动的工具栏图标也会发生变化。
屏幕截图显示TabLayout中的图标与活动中的图标相匹配。但活动图标应该是白色的。
设置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;
}
答案 0 :(得分:0)
您可以使用以下代码更改后退箭头图标的颜色;
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:textColorSecondary">@color/your_color_name</item>
</style>
答案 1 :(得分:0)
您可以在工具栏中使用主题。
<android.support.v7.widget.Toolbar
android:theme="@style/myToolbarTheme"
...
>
然后在您的主题中,您可以定义colorControlNormal属性:
<style name="myToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
....
<item name="colorControlNormal">@color/myColor</item>
答案 2 :(得分:0)
问题在于,TabLayout中用作示例的图标与其他活动中的图标相同,并且当应用色调时,它应用于图标drawable而不仅仅是图标视图在TabLayout中。
修复方法是简单地使用TabLayout的实际预期图标(不同的箭头和保存活动中使用的图标)。这样活动的可绘制图标不会受到影响。我有点傻,但是呃。