我正在将我的应用迁移到MaterialComponents主题。我在一个带有滚动行为的Coordinator布局内具有TabLayout的活动,如下所示:
<?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个标签,在TabLayout中正确显示了3个标签标题。
现在我有三个问题:
这里发生了什么?
编辑:我更好地理解了这个问题:看来这只是一个颜色问题。所选的标签标题颜色与背景相同,因此看不到。
[确定,我找到了答案:主要问题是我使用的是android:theme而不是样式来应用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>
如指定的here,我不必创建自己的样式来覆盖tabIndicatorColor,因为它应该已经采用了我在colors.xml中定义的colorOnPrimary。似乎有一个错误。