[MaterialComponents主题会中断TabLayout

问题描述 投票:0回答:1

我正在将我的应用迁移到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个标签标题。

现在我有三个问题:

  • TabLayout的文本为黑色,好像android:theme被忽略了
  • 不再有选定的选项卡指示器(它是我的强调色的条形)
  • 仅显示我的3个标签中的2个
    • 启动时,它们对齐正确
    • 如果滚动视图分页器以显示中间页面,则TabLayout中仍然只显示2个选项卡,但是现在一个选项卡左对齐,另一个选项卡右对齐
    • 如果再次滚动以显示第三个选项卡,则仍然只有2个选项卡标题为TabLayout,现在两个都向左对齐

这里发生了什么?

编辑:我更好地理解了这个问题:看来这只是一个颜色问题。所选的标签标题颜色与背景相同,因此看不到。

android android-tablayout material-components
1个回答
0
投票

[确定,我找到了答案:主要问题是我使用的是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。似乎有一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.