【问题标题】:TabLayout Icon Tint Changing Other Activities Actionbar Icon TintTabLayout 图标色调 更改其他活动 操作栏图标色调
【发布时间】:2017-09-26 11:59:08
【问题描述】:

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

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

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

【问题讨论】:

标签: android android-toolbar android-tablayout


【解决方案1】:

您可以使用以下代码更改后退箭头图标的颜色;

<style name="AppTheme" parent="Theme.AppCompat.Light">
 <item name="android:textColorSecondary">@color/your_color_name</item>
</style>

【讨论】:

  • 这不是很有用,因为它不会影响图标的色调,并且色调已经以编程方式被覆盖。
【解决方案2】:

您可以在工具栏中使用主题。

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

然后在你的主题中你可以定义 colorControlNormal 属性:

<style name="myToolbarTheme"  parent="ThemeOverlay.AppCompat.Dark.ActionBar">
  ....
  <item name="colorControlNormal">@color/myColor</item>  

【讨论】:

【解决方案3】:

问题是在 TabLayout 中用作示例的图标与其他活动中的图标是相同的可绘制图标,并且当应用着色时,它被应用于可绘制的图标,而不仅仅是图标的视图在 TabLayout 中。

解决方法是简单地为 TabLayout 使用我实际预期的图标(与活动中使用的箭头和保存图标不同的图标)。这样活动的可绘制图标不受影响。我有点笨,但是嗯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多