TabLayout设置每个选项卡的间距或边距

时间:2015-09-15 07:33:57

标签: android android-layout android-support-library androiddesignsupport android-tablayout

我想在每个标签之间设置保证​​金。就像在PagerTabStrip中有setTextSpacing(int textSpacing)来制作tab之间的文本间距一样。 TabLayout能做到吗?

8 个答案:

答案 0 :(得分:42)

一直在解决这个问题,在这个帖子上找到了解决方案:Android Design Support Library TabLayout using custom tabs layout but layout wrapping the tabs

<!-- Add the padding to tabPaddingStart and/or tabPaddingEnd -->
<android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/tab_layout_height"
        app:tabPaddingStart="10dp"
        app:tabPaddingEnd="10dp">

答案 1 :(得分:4)

您可以使用tabMinWidth属性。 像这样。

<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="44dp"
    app:tabIndicatorColor="@color/default_enable"
    app:tabTextColor="@color/font_default_03"
    app:tabSelectedTextColor="@color/default_enable"
    app:tabMinWidth="50dp"
    android:clipToPadding="false"
    android:paddingLeft="4dp"
    android:paddingRight="4dp" />

答案 2 :(得分:2)

布局

<android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

的java

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
int betweenSpace = 100;

ViewGroup slidingTabStrip = (ViewGroup) tabLayout.getChildAt(0);

for (int i=0; i<slidingTabStrip.getChildCount()-1; i++) {
    View v = slidingTabStrip.getChildAt(i);
    ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
    params.rightMargin = betweenSpace;
}

答案 3 :(得分:2)

当设置tabPadding不起作用时,可以尝试设置tabMaxWidth和tabMinWidth。对我来说是工作。

  <android.support.design.widget.TabLayout
            app:tabMaxWidth="200dp"
            app:tabMinWidth="20dp"
            app:tabPaddingStart="0dp"
            app:tabPaddingEnd="16dp"
            app:tabMode="scrollable" />

答案 4 :(得分:0)

<android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMinWidth="0dp"
        app:tabMode="scrollable"
        />

答案 5 :(得分:0)

您可以删除重量并在TabLayout中设置Tab的marginEnd,marginStart和width。

kotlin:

nav.main:hover ul>li>ul {
    overflow: visible;
    visibility: visible;
    max-height: 999px;
}
nav.main:focus-within ul>li>ul {
    overflow: visible;
    visibility: visible;
    max-height: 999px;
}

java:

val tabs = tabLayout.getChildAt(0) as ViewGroup

for (i in 0 until tabs.childCount ) {
       val tab = tabs.getChildAt(i)
       val layoutParams = tab.layoutParams as LinearLayout.LayoutParams
       layoutParams.weight = 0f
       layoutParams.marginEnd = 12.dpToPx()
       layoutParams.marginStart = 12.dpToPx()
       layoutParams.width = 10.dpToPx()
       v.layoutParams = layoutParams
       tabLayout.requestLayout()
}

答案 6 :(得分:0)

如果假设标签之间的距离相同,则显示的答案会有所帮助。

但有时您需要将最后一个标签与其他标签分开(在视图的末尾)。因此,您不能为工具栏创建菜单(也不能创建工具栏),也不能为所有内容使用通用选项卡指示器。

遗憾的是,您不能直接为每个 tabitem 设置 padding 和 margin,但是您可以创建一个虚构的多一个 tab item 并通过属性控制距离:

app:tabPaddingStart 应用程序:tabPaddingEnd 应用程序:tabMinWidth app:tabMaxWidth

虽然这有点像拐杖解决方案。

答案 7 :(得分:-1)

这是为四个不同选项卡设置保证金的方式。您可以更改setMargins(v1,v2,v3,v4)函数值,以获得适合您正在使用的选项卡数量的拟合。我希望这有帮助。 请注意,tabHost是TabHost的对象,托管您正在使用的不同选项卡。

Display display = getWindowManager().getDefaultDisplay();
            int width = display.getWidth();
            View currentView;
          for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
            {
                //This code removes divider between tabs
                tabHost.getTabWidget().setDividerDrawable(null);
                tabHost.getTabWidget().getChildAt(i).setLayoutParams(new
                         LinearLayout.LayoutParams((width/8)-2,50));
                 currentView = tabHost.getTabWidget().getChildAt(i);
                  LinearLayout.LayoutParams currentLayout =
                      (LinearLayout.LayoutParams) currentView.getLayoutParams();
                  currentLayout.setMargins(30, 5, 80, 0);

            }