TabLayout图标色调更改其他活动Actionbar图标色调

时间:2017-09-26 11:59:08

标签: android android-toolbar android-tablayout

我有一个TabLayout,其中的图标使用textColorPrimary主题属性着色以匹配主题(浅色或深色)。但是当我将此颜色色调应用于我的MainActivity中的TabLayout图标时,来自不同活动的工具栏图标也会发生变化。

屏幕截图显示TabLayout中的图标与活动中的图标相匹配。但活动图标应该是白色的。

TabLayout图标: enter image description here

单独的活动工具栏图标 enter image description here

设置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;
}

3 个答案:

答案 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的实际预期图标(不同的箭头和保存活动中使用的图标)。这样活动的可绘制图标不会受到影响。我有点傻,但是呃。

相关问题