我已经设置选项卡为UPDATE 29/05/2015这篇文章。在我的Nexus 4手机上,标签是全宽的,但在Nexus 7平板电脑上,它位于中间,没有覆盖全屏宽度。

Nexus 7截图 Nexus 4截图


当前回答

要强制制表符占用全宽度(分割成相等的大小),将以下应用到TabLayout视图:

TabLayout tabLayout = (TabLayout) findViewById(R.id.your_tab_layout);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setTabMode(TabLayout.MODE_FIXED);

其他回答

<android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMaxWidth="0dp"
            app:tabGravity="fill"
            app:tabMode="fixed" />

为我工作。这里还有xmlns:app="http://schemas.android.com/apk/res-auto"

在我的这个问题的变体中,我有3个中等大小的标签,它们没有占据平板电脑的全部宽度。我不需要在平板电脑上滚动标签,因为平板电脑足够大,可以在不滚动的情况下显示所有标签。但我确实需要这些标签可以在手机上滚动,因为手机太小了,无法同时显示所有的标签。

在我的案例中,最好的解决方案是添加一个res/layout-sw600dp/main_activity.xml文件,其中相关的TabLayout可以有app:tabGravity="fill"和app:tabMode="fixed"。但在我的常规res/layout/main_activity.xml中,我省略了app:tabGravity="fill"和app:tabMode="fixed",而使用app:tabMode="scrollable"。

我有同样的问题,我检查了TabLayout风格,我发现它的默认风格是Widget.Design.TabLayout,它有不同的实现(正常,横向和sw600dp)。

我们需要的是一个平板电脑(sw600dp),它有以下实现:

<style name="Widget.Design.TabLayout" parent="Base.Widget.Design.TabLayout">
        <item name="tabGravity">center</item>
        <item name="tabMode">fixed</item>
 </style>

在这个样式中,我们将使用“tabGravity”(可能的值是“center”或“fill”),并使用“fill”值。

但我们需要更深入,然后我们看到这个扩展了Base.Widget.Design。它的实现是:

<style name="Base.Widget.Design.TabLayout" parent="android:Widget">
    <item name="tabMaxWidth">@dimen/tab_max_width</item>
    <item name="tabIndicatorColor">?attr/colorAccent</item>
    <item name="tabIndicatorHeight">2dp</item>
    <item name="tabPaddingStart">12dp</item>
    <item name="tabPaddingEnd">12dp</item>
    <item name="tabBackground">?attr/selectableItemBackground</item>
    <item name="tabTextAppearance">@style/TextAppearance.Design.Tab</item>
    <item name="tabSelectedTextColor">?android:textColorPrimary</item>
</style>

因此,在这个样式中,我们需要重写“tabMaxWidth”。 在我的例子中,我将它设置为0dp,因此它没有限制。

我的风格是这样的:

<style name="MyTabLayout" parent="Widget.Design.TabLayout">
        <item name="tabGravity">fill</item>
        <item name="tabMaxWidth">0dp</item>
</style>

然后标签栏会从一边到另一边填满整个屏幕。

可滚动解决方案(Kotlin)

在xml:

     <com.google.android.material.tabs.TabLayout
            android:id="@+id/home_tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMaxWidth="0dp"
            app:tabMode="scrollable"
            android:fillViewport="true"
            app:tabGravity="fill" />

在芬兰湾的科特林:

在我的情况下,如果少于3个制表符,我分配相等的空间。

注:如有条件,请按您的要求

        if(list.size <= 3){
          allotEachTabWithEqualWidth(your_tab_layout)
        }

     fun allotEachTabWithEqualWidth(tabLayout: TabLayout) {
        tabLayout.tabMode=  TabLayout.MODE_SCROLLABLE
        val slidingTabStrip = tabLayout.getChildAt(0) as ViewGroup
        for (i in 0 until tabLayout.getTabCount()) {
            val tab = slidingTabStrip.getChildAt(i)
            val layoutParams = tab.layoutParams as LinearLayout.LayoutParams
            layoutParams.weight = 1f
            tab.layoutParams = layoutParams
        }

    }

这是有帮助的,你一定要试试

 <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMaxWidth="0dp"
        app:tabGravity="fill"
        app:tabMode="fixed"
        app:tabIndicatorColor="@color/white"
        app:tabSelectedTextColor="@color/white"
        app:tabTextColor="@color/orange" />