TabLayout legt den Abstand oder Rand für jede Registerkarte fest

Lesezeit: 5 Minuten

Ich möchte einen Rand zwischen den einzelnen Registerkarten festlegen. Wie in PagerTabStrip, der setTextSpacing(int textSpacing) hat, um Textabstände zwischen Tabulatoren zu erstellen. Kann TabLayout das?

Benutzeravatar von Sammy Patenotte
Sammy Patenotte

Ich habe dieses Problem auch eine Weile bekämpft und die Lösung in diesem Thread gefunden: Android Design Support Library TabLayout mit benutzerdefiniertem Tab-Layout, aber Layout-Umbruch der 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">

  • Es entfernt auch Leerzeichen zwischen Tabulatoren (die Standard sind), wenn Sie Paddings auf 0 setzen. Danke!

    – Yusuf Çağlar

    12. März 2018 um 18:07 Uhr


  • Gibt es dafür einen dynamischen Weg?

    – John-Salib

    23. Januar 2019 um 12:45 Uhr

  • Nicht, dass ich wüsste, habe nur den TabLayout-Quellcode überprüft, und es sieht so aus, als ob es nur über XML geht.

    – Sammy Patenotte

    24. Juli 2019 um 16:37 Uhr

  • Standardmäßig fügt es Padding hinzu – verwenden Sie app:tabPaddingStart=”0dp” app:tabPaddingEnd=”0dp”, wenn Sie kein Padding wünschen

    – Liebe leben

    21. März 2021 um 16:37 Uhr

Sie können das tabMinWidth-Attribut verwenden. so was.

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

  • Aww, es war clipToPadding, das mir geholfen hat, den Indikator zu positionieren, aber immer noch einen großen anklickbaren Bereich zu haben

    – Sebastian Helzer

    4. Februar 2022 um 15:13 Uhr

Benutzeravatar von Rasoul Miri
Rasoul Miri

Sie können Gewicht entfernen und einstellen marginEnd,marginStart und width für Tabs ein TabLayout.

Kotlin:

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()
       tab.layoutParams = layoutParams
       tabLayout.requestLayout()
}

Java:

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

for (int i = 0; i < tabs.getChildCount() - 1; i++) {
       View tab = tabs.getChildAt(i);
       LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) tab.getLayoutParams();
       layoutParams.weight = 0;
       layoutParams.setMarginEnd(12);
       layoutParams.setMarginEnd(12);
       layoutParams.width = 10;
       tab.setLayoutParams(layoutParams);
       tabLayout.requestLayout();
}

  • Sie sollten tabLayout.requestLayout() nach der for-Schleife für eine bessere Leistung aufrufen

    – gturedi

    8. Februar 2021 um 13:26 Uhr

  • Ich bekomme Indikator in den tabs.getChildAt(i)

    – kirkadev

    13. August 2021 um 16:53 Uhr

Layout

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

Wenn Sie festlegen, dass tabPadding nicht funktioniert, können Sie versuchen, tabMaxWidth und tabMinWidth festzulegen. Es ist Arbeit für mich.

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

Benutzeravatar von masoud jafari
masoud jafari

Wenn jemand einen benutzerdefinierten Hintergrund für Registerkarten (Selektor) hat, müssen Sie nur die Ebenenliste zum Hintergrund der Registerkarten hinzufügen und den Rand für sie festlegen

Wähler:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_selected_tab" android:state_selected="true"/>
    <item android:drawable="@drawable/bg_unselected_tab"/>
</selector>

ausgewählte Registerkarte:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:right="8dp" android:left="8dp">
        <shape>
            <stroke android:width="1dp" android:color="@color/Green"/>
            <corners android:radius="@dimen/cardCornerRedius"/>
        </shape>
    </item>
</layer-list>

Nicht ausgewählte Registerkarte:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:right="8dp" android:left="8dp">
        <shape>
            <stroke android:width="1dp" android:color="@color/Gray"/>
            <corners android:radius="@dimen/cardCornerRedius"/>
        </shape>
    </item>
</layer-list>

Benutzeravatar von Kishan Solanki
Kischan Solanki

Geben Sie hier die Bildbeschreibung ein

Wenn Sie so etwas für Ihre erreichen wollten TabLayout dann folgen Sie diesen Schritten:

1. Layout-XML-Code:

    <com.google.android.material.tabs.TabLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/dp_5"
    app:tabBackground="@drawable/tab_selector"
    app:tabIndicator="@null"
    app:tabSelectedTextColor="@color/white"
    app:tabTextColor="@color/black" />

2. Tab-Hintergrund Drawable Selector (drawable/tab_selector):

   <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/tab_background_selected" android:state_selected="true" />
    <item android:drawable="@drawable/tab_background_unselected" />
</selector>

3. Ziehbar von tab_background_selected :

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="@dimen/dp_5"
        android:left="@dimen/dp_5"
        android:right="@dimen/dp_5"
        android:top="@dimen/dp_5">

        <shape>
            <solid android:color="@color/btnBG" />
            <corners android:radius="@dimen/dp_10" />
        </shape>
    </item>
</layer-list>

4. Drawable von tab_background_uns selected :

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="@dimen/dp_5"
        android:left="@dimen/dp_5"
        android:right="@dimen/dp_5"
        android:top="@dimen/dp_5">

        <shape>
            <solid android:color="@color/white" />
            <corners android:radius="@dimen/dp_10" />
        </shape>
    </item>
</layer-list>

1438710cookie-checkTabLayout legt den Abstand oder Rand für jede Registerkarte fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy