Android 如何从样式或主题更改选项卡颜色

Android how can i change the tab color from style or theme

您好,正如标题所暗示的那样,我确信这应该很简单,但可惜它对我不起作用,我不是在寻找像 onTabSelected 这样的花哨的东西,我只是想设置整个颜色基于主题的小部件,现在我正在尝试执行以下操作,我不确定是否正确但它不起作用,

看来这就是我需要的:

<item name="tabBackground">@color/colorPinkPrimary</item>

但是我已经尝试通过两种方式将它添加到我的主题中,但都不起作用,第一种方法是直接将它添加到我的主题中,但没有任何乐趣,我尝试的第二种方法是添加另一种主题。

<style name="CustomTabLayoutStylePink" parent="Base.Widget.Design.TabLayout">
    <item name="tabSelectedTextColor">@color/selected_textPink</item>
    <item name="tabIndicatorColor">@color/colorPinkAccent</item>
    <item name="tabTextAppearance">@style/CustomTabTexStylePink</item>
    <item name="tabBackground">@color/colorPinkPrimary</item>
</style>

并像这样从我的主题中引用它(只是重申一下,我不知道这是否是最佳实践,甚至是可行的,它看起来是正确的

<item name="android:tabWidgetStyle">@style/CustomTabLayoutStylePink</item>

有效的如下:

<item name="android:background">@color/colorPinkPrimary</item>

这适用于我整个应用程序中的每个视图,甚至包括首选项 activity 文本视图。

tabBackground 应该在您的 XML 文件中,而不是在样式中。

<android.support.design.widget.TabLayout
    ...
    app:tabBackground="@color/colorPinkPrimary"
    ...
/>

好的,所以我想要的是不可能的,我设置了一个首选项来记录应该应用什么主题,并根据选择的主题,相应地为选项卡着色,如下所示

 private void setupTabBackground(){

    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());
    //  Create a new boolean and preference and set it to true
    prefThemeString = sharedPreferences.getString("THEME SELECTED","BLUE");
    switch (prefThemeString){
        case "BLUE":
            tabLayout.setBackgroundColor(getResources().getColor(R.color.colorPrimaryBlue));
            break;
        case "PINK":
            tabLayout.setBackgroundColor(getResources().getColor(R.color.colorPinkPrimary));
            break;
    }

}

我认为在此 activity 中也应该有一个共享的偏好侦听器,但我稍后可以解决这个问题