Tab not taking full width on Tablet device [Using android.support.design.widget.TabLayout]

前端 未结 12 2068
萌比男神i
萌比男神i 2020-11-28 17:39

I have setup tabs as UPDATE 29/05/2015 this post. Tabs take full width on my Nexus 4 mobile but on nexus 7 tablet it in center and not cover full screen wid

相关标签:
12条回答
  • 2020-11-28 18:14

    To force tabs to take up the full width (split into equal sizes), apply the following to the TabLayout view:

    TabLayout tabLayout = (TabLayout) findViewById(R.id.your_tab_layout);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setTabMode(TabLayout.MODE_FIXED);
    
    0 讨论(0)
  • 2020-11-28 18:17

    For me the following code worked and was enough.

    <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="fill"/>
    
    0 讨论(0)
  • 2020-11-28 18:19

    Solution for scrollable: (TabLayout.MODE_SCROLLABLE), that is when ever you need more than 2 tabs (Dynamic tabs)

    Step 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>
    

    Step 2 : Your xml layout

    <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" />
    

    Step 3: In your Activity/Fragment where ever you have tabs.

    /**
         * 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);
            }
    
        }
    
    0 讨论(0)
  • 2020-11-28 18:21

    I had the same problem and I checked the TabLayout style, and i found that its default style is Widget.Design.TabLayout which has different implementations (normal, landscape and sw600dp).

    The one we need is the one for tablets (sw600dp) which has the following implementation:

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

    From this style we will use "tabGravity" (which possible values are "center" or "fill") using the "fill" value.

    But we need to go deeper, and then we see that this one extends from Base.Widget.Design.TabLayout, which implementation is:

    <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>
    

    So, from this style we will need to override "tabMaxWidth". In my case I set it to 0dp, so it has no limit.

    And my style looked like this:

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

    And then the tab bar will fill the whole screen from side to side.

    0 讨论(0)
  • 2020-11-28 18:23

    A "simpler" answer borrowed from Kaizie would just be adding app:tabMaxWidth="0dp" in your TabLayout xml:

    <android.support.design.widget.TabLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMaxWidth="0dp"
                app:tabGravity="fill"
                app:tabMode="fixed" />
    
    0 讨论(0)
  • 2020-11-28 18:23
    <android.support.design.widget.TabLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMaxWidth="0dp"
                app:tabGravity="fill"
                app:tabMode="fixed" />
    

    work for me. This also have xmlns:app="http://schemas.android.com/apk/res-auto"

    0 讨论(0)
提交回复
热议问题