Android - Как динамически изменить цвет фона или весь TabLayout? - PullRequest
0 голосов
/ 19 апреля 2019

Мне нужно динамически менять цвет фона всей вкладки с помощью кода в моем приложении. Мне просто нужно знать правильную строку для ввода. Мне не нужно менять выбранную вкладку или что-нибудь. Я хочу оставить стиль и цвета текста и индикаторную линию как есть. Я просто хочу динамически изменять фон всей компоновки вкладок в коде. Спасибо за вашу помощь.

Я уже пробовал приведенную ниже строку кода. Не сработало Также включен мой TabLayout XML.

private TabLayout mTabLayout;
mTabLayout = (TabLayout) findViewById(R.id.tabs);

mTabLayout.setBackgroundColor
(this.getResources().getColor(R.color.dark_grey));

<android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        style="@style/CategoryTab"
        android:layout_width="match_parent"
        android:layout_height="@dimen/activity_generic_margin_28"
        app:tabBackground="@color/app_bar"/>

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 20 апреля 2019

Я решил эту проблему, проверив логическое значение, заданное для ночной темы, перед настройкой представления контента в onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SharedPreferences nightModeSwitchState = getSharedPreferences("NightModeSwitchState", 0);
    mNightModeSwitchState = nightModeSwitchState.getBoolean("NightModeSwitchState", false);

    if (mNightModeSwitchState) {
        setContentView(R.layout.activity_book_night);
    } else {
        setContentView(R.layout.activity_book);
    }

У меня есть два макета, оба из которых включают tabLayouts. Один из них ссылается на файл стиля для tabLayout, настроенный для цветов ночного режима с темным фоном, а макет ссылается на файл стиля, настроенный на обычные цвета для tablayout.

<style name="CategoryTab" parent="Widget.Design.TabLayout">
    <item name="tabIndicatorColor">@android:color/white</item>
    <item name="tabSelectedTextColor">@android:color/white</item>
    <item name="tabTextAppearance">@style/CategoryTabTextAppearance</item>
    <item name="tabBackground">@drawable/tab_regular_theme</item>
    <item name="android:textColorSecondary">@android:color/white</item>
</style>

<style name="CategoryTabNight" parent="Widget.Design.TabLayout">
    <item name="tabIndicatorColor">@android:color/white</item>
    <item name="tabSelectedTextColor">@android:color/white</item>
    <item name="tabTextAppearance">@style/CategoryTabTextAppearance</item>
    <item name="tabBackground">@drawable/tab_layout_dark_mode</item>
    <item name="android:textColorSecondary">@android:color/white</item>
</style>

Файлы стилей ссылаются на различные рисунки, которые управляют цветами фона, как вы можете видеть выше ... и вот рисунки ...

Здесь доступен ночной режим:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/dark_grey" android:state_selected="true"/>
<item android:drawable="@color/dark_grey"/>
</selector>

Вот обычный режим рисования:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/app_bar" android:state_selected="true"/>
<item android:drawable="@color/app_bar"/>
</selector>

Все остальное - это макеты, идентичные, чтобы ничего не испортить, просто изменились файлы стилей для таблиц. Я надеюсь это имеет смысл. Я проверил это, и это работает для меня. Я пробовал так много других вещей, и ничего не получалось. Важно вызвать Shared Preference, чтобы получить значение перед проверкой логического значения. Надеюсь, это кому-нибудь поможет.

...