Material Components 1.1.0 未显示 TabItem 图标
TabItem icon not showing with Material Components 1.1.0
刚刚将我的应用程序升级到 Material Components 1.1.0,我的 TabLayout 中的图标不再显示。
按照googlematerial.io官网的教程,在AndroidStudio中预览效果不错,但是启动应用后,图标没有出现。
这里是 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中的所有图标都被重置为空。
通过禁用此行,我拥有了所有图标。
但是,如何在我的 TabLayout 上设置带有图标的 ViewPager ?
如果我手动设置它们,我将不会从 MDC
继承颜色
方法 tabLayout.setupWithViewPager()
删除所有选项卡,然后从改编的选项卡中添加选项卡。
要添加图标,您可以使用类似的东西:
for (int i = 0; i < tabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(iconResId);
}
If I set them up manually, I will not have the color inherited from MDC
com.google.android.material.tabs.TabLayout
默认使用Widget.MaterialComponents.TabLayout
样式。如果您想覆盖图标色调,只需在您的布局或自定义样式中使用 tabIconTint
:
<com.google.android.material.tabs.TabLayout
app:tabIconTint="@color/my_selector"
...>
刚刚将我的应用程序升级到 Material Components 1.1.0,我的 TabLayout 中的图标不再显示。 按照googlematerial.io官网的教程,在AndroidStudio中预览效果不错,但是启动应用后,图标没有出现。
这里是 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中的所有图标都被重置为空。 通过禁用此行,我拥有了所有图标。 但是,如何在我的 TabLayout 上设置带有图标的 ViewPager ? 如果我手动设置它们,我将不会从 MDC
继承颜色方法 tabLayout.setupWithViewPager()
删除所有选项卡,然后从改编的选项卡中添加选项卡。
要添加图标,您可以使用类似的东西:
for (int i = 0; i < tabLayout.getTabCount(); i++) {
tabLayout.getTabAt(i).setIcon(iconResId);
}
If I set them up manually, I will not have the color inherited from MDC
com.google.android.material.tabs.TabLayout
默认使用Widget.MaterialComponents.TabLayout
样式。如果您想覆盖图标色调,只需在您的布局或自定义样式中使用 tabIconTint
:
<com.google.android.material.tabs.TabLayout
app:tabIconTint="@color/my_selector"
...>