Значок TabItem не отображается с компонентами материала 1.1.0

Просто обновил мое приложение до Material Components 1.1.0, и значки в моем TabLayout больше не отображаются. Я следовал руководству на официальном сайте google material.io, предварительный просмотр в Android Studio хорош, но после запуска приложения значки не отображаются.

Вот XML-код:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tabLayout"
            android:layout_gravity="bottom"
            style="@style/Widget.MaterialComponents.TabLayout.Colored"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="center">

            <com.google.android.material.tabs.TabItem
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:icon="@drawable/ic_home"/>

            <com.google.android.material.tabs.TabItem
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:icon="@drawable/ic_fav"/>

            <com.google.android.material.tabs.TabItem
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:icon="@drawable/ic_about"/>


        </com.google.android.material.tabs.TabLayout>

    </androidx.viewpager.widget.ViewPager>

</RelativeLayout>

В моем файле styles.xml я определил colorPrimary и colorOnPrimary, которые используются для тонирования значков и цвета фона TabLayout.

Однако, даже если предварительный просмотр в Android Studio хороший, после запуска приложения фон моего TabLayout отображается правильным цветом, но значки не отображаются.

РЕДАКТИРОВАТЬ:

Просто используйте режим отладки, и значок вкладок будет нулевым для каждого элемента вкладки:

введите здесь описание изображения

ИЗМЕНИТЬ 2:

Я нашел проблему, но не нашел ее решения! Проблема исходит из этой строки:

tabLayout.setupWithViewPager(viewPager)

После выполнения этой строки все значки в TabLayout сбрасываются до нуля. Отключив эту строку, я получу все свои значки. Однако как я могу настроить ViewPager со значками на моем TabLayout? Если я настрою их вручную, у меня не будет цвета, унаследованного от MDC.


person mamenejr    schedule 01.06.2020    source источник
comment
также загрузите файлы styles.xml   -  person AgentP    schedule 01.06.2020
comment
Я уже это сделал, наследуется от Theme.MaterialComponents.Light.NoActionBar   -  person mamenejr    schedule 01.06.2020
comment
каковы значения для colorPrimary и colorOnPrimary?   -  person AgentP    schedule 01.06.2020
comment
<color name="colorPrimary">#00838f</color> & <color name="colorOnPrimary">#ff8f00</color> Я не знаю, чем это может вам помочь   -  person mamenejr    schedule 01.06.2020
comment
Код мне кажется нормальным ... Я пробовал, они отображаются правильно ...   -  person AgentP    schedule 01.06.2020
comment
Разместите свой код, пожалуйста   -  person Gabriele Mariotti    schedule 01.06.2020


Ответы (1)


Метод tabLayout.setupWithViewPager() удаляет все вкладки, а затем добавляет вкладки из адаптированного.
Чтобы добавить значки, вы можете использовать что-то вроде:

for (int i = 0; i < tabLayout.getTabCount(); i++) {
        tabLayout.getTabAt(i).setIcon(iconResId);
}

Если я настрою их вручную, у меня не будет цвета, унаследованного от MDC.

com.google.android.material.tabs.TabLayout использует по умолчанию стиль Widget.MaterialComponents.TabLayout. Если вы хотите переопределить оттенок значка, просто используйте tabIconTint в своем макете или пользовательском стиле:

<com.google.android.material.tabs.TabLayout
  app:tabIconTint="@color/my_selector"
  ...>
person Gabriele Mariotti    schedule 01.06.2020
comment
При этом будет ли учитываться стиль TabLayout для значков и их оттенок? - person mamenejr; 01.06.2020
comment
@mamenejr viewPager не меняет стиль tabLayout. - person Gabriele Mariotti; 01.06.2020
comment
@mamenejr нормальное поведение Google в отношении стиля или viewPager? - person Gabriele Mariotti; 01.06.2020
comment
ViewPager отключение значков на TabsLayout - person mamenejr; 02.06.2020