Подтвердить что ты не робот

Стиль вкладки TabLayout

Я использую новую библиотеку TabLayout из com.android.support:design. Я хочу изменить фон выбранных/невыбранных вкладок. Я смотрю на источники и обнаружил только атрибут tabBackground, который меняет цвет всех вкладок и не контролирует выбранный цвет табло.

Как я могу управлять выбранным/невыбранным фоном вкладки?

4b9b3361

Ответ 1

Определить:

    <style name="AppTabLayout" parent="Widget.Design.TabLayout">
        <item name="tabMaxWidth">@dimen/tab_max_width</item>
        <item name="tabIndicatorColor">?attr/colorAccent</item>
        <item name="tabIndicatorHeight">4dp</item>
        <item name="tabPaddingStart">6dp</item>
        <item name="tabPaddingEnd">6dp</item>
        <item name="tabBackground">?attr/selectableItemBackground</item>
        <item name="tabTextAppearance">@style/AppTabTextAppearance</item>
        <item name="tabSelectedTextColor">@color/range</item>
    </style>

    <!-- for text -->
    <style name="AppTabTextAppearance" parent="TextAppearance.Design.Tab">
        <item name="android:textSize">12sp</item>
        <item name="android:textColor">@color/orange</item>
        <item name="textAllCaps">false</item>
    </style>

Применить

<android.support.design.widget.TabLayout
    style="@style/AppTabLayout"
    app:tabTextAppearance="@style/AppTabTextAppearance"
    android:layout_width="match_parent"
    .... />

Ответ 2

Если вы посмотрите на TabLayout.class, вы увидите внутренний TabView.class для фактического макета вкладки. Такой же макет, как и любой другой с атрибутом isSelected. Выбор вкладки также повлияет на это, поэтому все, что вам нужно сделать, это создать выделение фона для выбора, например

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/tab_bg_selected"/>
<item android:drawable="@color/tab_bg_unselected"/></selector>

и прикрепите его к атрибуту tabBackground, например. в XML как

<android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabBackground="@drawable/tab_bg"
            app:tabIndicatorHeight="4dp"/>

Ответ 3

Я прочитал Как создать ActionBar, фон вкладки на выбранной вкладке и выяснить, что делать. Это действительно аналогичная проблема, но я нашел удивительное решение специально для TabLayout:

<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:background="@color/tab_layout_color"
    app:tabIndicatorHeight="48dp"
    app:tabIndicatorColor="@color/selected_tab_color"
    />

обратите внимание, что layout_height и tabIndicatorHeight имеют одинаковую высоту. Таким образом, вы получаете довольно переходную анимацию таким образом.

Ответ 4

Я тоже встретил эту проблему. Я просто искал tabIndicatorColor во всем проекте и нашел следующий код в некотором R.java:

       @see #TabLayout_tabBackground
       @see #TabLayout_tabContentStart
       @see #TabLayout_tabGravity
       @see #TabLayout_tabIndicatorColor
       @see #TabLayout_tabIndicatorHeight
       @see #TabLayout_tabMaxWidth
       @see #TabLayout_tabMinWidth
       @see #TabLayout_tabMode
       @see #TabLayout_tabPadding
       @see #TabLayout_tabPaddingBottom
       @see #TabLayout_tabPaddingEnd
       @see #TabLayout_tabPaddingStart
       @see #TabLayout_tabPaddingTop
       @see #TabLayout_tabSelectedTextColor
       @see #TabLayout_tabTextAppearance
       @see #TabLayout_tabTextColor

Итак, проблема решена. Пусть это поможет вам.
то есть я использую IDEA