在平板电脑设备上没有占据全宽的标签[使用android.support.design.widget.TabLayout]

Max*_*Max 186 tabs android width android-appcompat android-tablayout

我有设置标签作为UPDATE 29/05/2015 这篇文章.标签在我的Nexus 4手机上占据全宽,但在nexus 7平板电脑上占据中心位置而不是覆盖全屏宽度.

Nexus 7截图 Nexus7 Nexus 4截图 Nexus 4

Ada*_*hns 557

从Kaizie借来的 "更简单"的答案就是添加app:tabMaxWidth="0dp"你的TabLayoutxml:

<android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMaxWidth="0dp"
            app:tabGravity="fill"
            app:tabMode="fixed" />
Run Code Online (Sandbox Code Playgroud)

  • 如果我需要它可滚动怎么办?更改tabMode以支持滚动中断此解决方案. (17认同)
  • 嗨..我试过加上这个.但是单个选项卡没有占据选项卡布局的整个宽度. (5认同)
  • 任何可滚动的解决方案? (3认同)
  • 如果未设置tabMode,此解决方案也可以使用.可滚动的tapMode似乎不支持填充重力和0dp最大宽度的功能. (3认同)
  • 为什么会这样?这是默认行为吗?或者我用得不好的东西?将标签设置在中间是否是准则的一部分?使用3+标签时,我不会发生这种情况.仅限2个标签. (3认同)
  • 有没有办法以编程方式设置app:tabMaxWidth? (2认同)

Kai*_*zie 87

我有同样的问题,我检查了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>
Run Code Online (Sandbox Code Playgroud)

从这种风格,我们将使用" 填充 "值使用" tabGravity "(可能的值为"center"或"fill").

但我们需要更深入,然后我们看到这个延伸Base.Widget.Design.TabLayout,实现是:

<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>
Run Code Online (Sandbox Code Playgroud)

因此,从这种风格我们需要覆盖" tabMaxWidth ".在我的情况下,我把它设置为0dp,所以它没有限制.

我的风格看起来像这样:

<style name="MyTabLayout" parent="Widget.Design.TabLayout">
        <item name="tabGravity">fill</item>
        <item name="tabMaxWidth">0dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后标签栏将从一侧到另一侧填满整个屏幕.

  • 这就像是Sherlock的一集.谢谢!! (3认同)

Ram*_*hat 26

可滚动的解决方案:(TabLayout.MODE_SCROLLABLE),即需要超过2个选项卡的时候(动态选项卡)

第1步:style.xml

<style name="tabCustomStyle" parent="Widget.Design.TabLayout">
            <item name="tabGravity">fill</item>
            <item name="tabMaxWidth">0dp</item>
            <item name="tabIndicatorColor">#FFFEEFC4</item>
            <item name="tabIndicatorHeight">2dp</item>
            <item name="tabTextAppearance">@style/MyCustomTabTextAppearance</item>
            <item name="tabSelectedTextColor">#FFFEEFC4</item>
        </style>

        <style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab">
            <item name="android:textSize">@dimen/tab_text_size</item>
            <item name="android:textAppearance">@style/TextAppearance.roboto_medium</item>
            <item name="textAllCaps">true</item>
        </style>
        <style name="TextAppearance.roboto_medium" parent="android:TextAppearance">
            <item name="android:fontFamily">sans-serif-medium</item>
        </style>
Run Code Online (Sandbox Code Playgroud)

第2步:您的xml布局

<android.support.design.widget.TabLayout
            android:id="@+id/sliding_tabs"
            style="@style/tabCustomStyle"
            android:layout_width="match_parent"
            android:layout_height="@dimen/tab_strip_height"
            android:background="@color/your_color"
            app:tabMode="scrollable"
            app:tabTextColor="@color/your_color" />
Run Code Online (Sandbox Code Playgroud)

第3步:在您的活动/片段中,您有标签.

/**
     * To allow equal width for each tab, while (TabLayout.MODE_SCROLLABLE)
     */
    private void allotEachTabWithEqualWidth() {

        ViewGroup slidingTabStrip = (ViewGroup) mTabLayout.getChildAt(0);
        for (int i = 0; i < mTabLayout.getTabCount(); i++) {
            View tab = slidingTabStrip.getChildAt(i);
            LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) tab.getLayoutParams();
            layoutParams.weight = 1;
            tab.setLayoutParams(layoutParams);
        }

    }
Run Code Online (Sandbox Code Playgroud)


Jon*_*rns 15

要强制选项卡占据整个宽度(拆分为相同的大小),请将以下内容应用于TabLayout视图:

TabLayout tabLayout = (TabLayout) findViewById(R.id.your_tab_layout);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setTabMode(TabLayout.MODE_FIXED);
Run Code Online (Sandbox Code Playgroud)

  • 只是让人们知道,如果您的 `TabLayout` 设置为 `app:tabMode="scrollable"`,这将不起作用,这将导致标签变成固定长度(长字会换行)并且标签将不再滑动,基本上使选项卡再次“固定”。 (3认同)

小智 5

<android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMaxWidth="0dp"
            app:tabGravity="fill"
            app:tabMode="fixed" />
Run Code Online (Sandbox Code Playgroud)

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


小智 5

这对你必须尝试很有帮助

 <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" />
Run Code Online (Sandbox Code Playgroud)