Как изменить цвет вкладки, выбранной в tablayout - PullRequest
0 голосов
/ 11 июля 2019

Как изменить цвет выбранной вкладки? Мне бы хотелось, чтобы у каждой вкладки был свой цветовой атрибут. Таким образом, выбранная вкладка 1 будет красного цвета. Выбранная вкладка 2 будет синей. Вкладка 3 выбрана желтой. Если они не выбраны, они возвращаются на вкладку исходного цвета.

В настоящее время я использую селектор для изменения фона выбранной вкладки. Однако это допускает только один цвет. Я хотел бы иметь несколько цветов

Это unselected_tab.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">
    <solid
        android:color="@color/colorPrimaryDark" />

</shape>

Это selected_tab.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">
    <solid
        android:color="@color/tabSelectedColor" />

</shape>

Это селектор, который я использую

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:enterFadeDuration="50"
    android:exitFadeDuration="50" >

    <item android:drawable="@drawable/tab_selected"
        android:state_selected="false" />
    <item android:drawable="@drawable/tab_unselected"
        android:state_selected="true"/>
</selector>

И я применяю его к фону табуляции

<com.google.android.material.tabs.TabLayout
            android:id="@+id/tablayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimaryDark"
            android:minHeight="?attr/actionBarSize"
            android:elevation="5dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:tabIndicatorColor="@android:color/white"
            app:tabMode="scrollable"
            app:tabMaxWidth="100dp"
            app:tabBackground="@drawable/tab_selector"
            />

Ниже приведены некоторые скриншоты того, как это выглядит в настоящее время. enter image description here

enter image description here

В идеале, я бы хотел, чтобы каждая вкладка имела свой отдельный цвет.

Как это сделать?

РЕДАКТИРОВАТЬ: ИДЕАЛЬНО, я хотел бы изменить каждый цвет табуляции программно

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

Для тех, кто ищет решение этой проблемы. Я смог найти один. Вы можете применить цвет к макету дочернего элемента tabLayout. Для некоторого ссылочного кода это то, что я использовал, действительно хорошо для меня работало

final LinearLayout tabsContainerLayout = (LinearLayout)expenseTabs.getChildAt(0);
Linear LayouttempLinearLayout = (LinearLayout)tabsContainerLayout.getChildAt(selectedTabPosition);
tempLinearLayout.setBackgroundColor(Color.RED);
0 голосов
/ 11 июля 2019

Просто добавьте следующие 2 атрибута в макет вкладки.

app:tabSelectedTextColor="@color/color_primary_text"
app:tabTextColor="@color/color_secondary_text"

Вся табличная раскладка в xml выглядит следующим образом

<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_gravity="bottom"
android:background="@color/button_background"
android:fillViewport="true"
app:tabBackground="@drawable/fixed_bottom_button"
app:tabIndicatorColor="@color/color_primary_text"
app:tabMode="fixed"
app:tabSelectedTextColor="@color/color_primary_text"
app:tabTextColor="@color/color_secondary_text" />
...