МатериалКомпоненты перерывов в темах TabLayout - PullRequest
1 голос
/ 10 февраля 2020

Я перевожу свое приложение на темы MaterialComponents. У меня есть операция с TabLayout внутри компоновки Coordinator с прокруткой, например:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:elevation="6dp">

        <com.google.android.material.appbar.MaterialToolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.MaterialComponents.Light"
            app:elevation="0dp"
            app:layout_scrollFlags="scroll|enterAlways|snap" />

        <com.google.android.material.tabs.TabLayout
            android:layout_below="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.MaterialComponents.Light"
            app:tabMode="fixed"
            app:elevation="0dp" />

    </com.google.android.material.appbar.AppBarLayout>

    <androidx.viewpager.widget.ViewPager
        android:layout_below="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Это работало нормально с темами AppCompat. У меня есть 3 вкладки, и названия 3 вкладок были правильно отображены в TabLayout.

Теперь у меня есть три проблемы:

  • текст TabLayout черный, как будто android : тема была проигнорирована
  • больше нет индикатора выбранной вкладки (это была полоса в моем цвете акцента)
  • только 2 из 3 моих вкладок отображаются
    • при запуске, они выровнены по правому краю
    • , если я прокручиваю пейджер для отображения средней страницы, у меня по-прежнему отображаются только 2 вкладки в TabLayout, но теперь одна выровнена по левому краю, а другая выровнена по правому краю
    • если я прокручиваю снова, чтобы показать 3-ю вкладку, все еще есть только 2 вкладки, название которых является TabLayout, и теперь обе выровнены по левому краю

Что здесь происходит?

РЕДАКТИРОВАТЬ: Я понял проблему лучше: кажется, это «просто» проблема цвета. Цвет заголовка выбранной вкладки совпадает с цветом фона, поэтому я его не вижу.

1 Ответ

1 голос
/ 10 февраля 2020

Хорошо, я нашел ответ: основная проблема заключалась в том, что я использовал android: тема, а не стиль, чтобы применить стиль TabLayout.

Теперь я делаю это:

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tabLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/AppTheme.TabLayout"/>

А вот AppTheme.TabLayout:

<style name="AppTheme.TabLayout" parent="Widget.MaterialComponents.TabLayout.Colored">
    <item name="tabIndicatorColor">@color/colorOnPrimary</item>
</style>

Как указано здесь , мне не нужно создавать свой собственный стиль для переопределения tabIndicatorColor, так как он уже должен принимать colorOnPrimary Я определил в своих цветах. xml. Кажется, есть ошибка.

...