Wie ändere ich die Farbe des Symbols auf der ausgewählten Registerkarte von TabLayout?

82

Ich verwende a TabLayoutmit a ViewPagerund frage mich, wie ich die Farbe des Symbols der ausgewählten Registerkarte im TabLayout am effizientesten ändern kann.

Eine perfekte Referenz für die Implementierung ist die Youtube-App von Google . Auf der Hauptseite befinden sich vier dunkelgraue Symbole. Wenn eine bestimmte Registerkarte ausgewählt ist, wird das Symbol der Registerkarte weiß.

Wie kann ich ohne Bibliotheken von Drittanbietern den gleichen Effekt erzielen?

Eine mögliche Lösung sind offenbar Selektoren. In diesem Fall müsste ich jedoch sowohl eine weiße als auch eine graue Version des Symbols finden und dann das Symbol wechseln, wenn die Registerkarte ausgewählt oder abgewählt wird. Ich frage mich, ob es eine effektivere Methode gibt, bei der ich nur die Symbolfarbe oder etwas anderes hervorheben kann. Ich konnte dies in keinem Tutorial finden.

BEARBEITEN

Die Lösung, die ich direkt oben erwähne, erfordert die Verwendung von zwei Zeichen für das Symbol jeder Registerkarte. Ich frage mich , ob es einen Weg gibt , ich es programmatisch mit tun kann ONE ziehbar für jeden Reiter das Symbol.

Weg
quelle
1
Bitte verwenden Sie das android-studioTag nur, wenn es für die IDE spezifisch ist.
Sufian
@WayWay hast du die Lösung für dieses Problem bekommen? Ich suche auch das gleiche.
Raju

Antworten:

93

Ich habe einen Weg gefunden, der einfach sein kann.

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setOnTabSelectedListener(
            new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {

                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    super.onTabSelected(tab);
                    int tabIconColor = ContextCompat.getColor(context, R.color.tabSelectedIconColor);
                    tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
                }

                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
                    super.onTabUnselected(tab);
                    int tabIconColor = ContextCompat.getColor(context, R.color.tabUnselectedIconColor);
                    tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
                }

                @Override
                public void onTabReselected(TabLayout.Tab tab) {
                    super.onTabReselected(tab);
                }
            }
    );
Cristian Hoyos
quelle
Kannst du mir sagen, dass ich versucht habe, dem gleichen Weg zu folgen, aber leider wird mein onTabSelected nicht aufgerufen, während es viewpager.setOnPageChangeListener aufruft
Erum
Ich weiß nicht, warum onTabSelected nicht aufgerufen wird, aber ich kann Ihnen empfehlen, ein Code-Debugging durchzuführen, um zu wissen, wo das Problem liegt. Wenn Sie den Fehler definitiv nicht finden, können Sie ihn wahrscheinlich mit setOnPageChangeListener erreichen, aber es könnte schwieriger sein, dies zu tun.
Cristian Hoyos
3
setOnTabSelectedListener ist veraltet. Verwenden Sie addOnTabSelectedListener
Nick Asher
1
Hallo, ich verwende customView für Tablayout, konnte aber die Farbe des Symbols nicht ändern und die Backgorund-Farbe bei der Auswahl der Registerkarten mit customView anzeigen. Irgendeine Idee, wie ich es machen soll?
Erum
50

Dies kann sehr einfach und vollständig in XML erfolgen.

Fügen Sie Ihrem TabLayout in Ihrer XML app:tabIconTint="@color/your_color_selector"wie folgt eine Zeile hinzu :

 <android.support.design.widget.TabLayout
     android:id="@+id/tab_layout"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     app:tabIconTint="@color/your_color_selector"
     app:tabIndicatorColor="@color/selected_color"/>

Erstellen Sie dann eine Farbauswahldatei (oben "your_color_selector.xml" genannt) im Verzeichnis res / color:

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

Dies setzt voraus, dass Ihre Farben.xml-Datei zwei Farben enthält: "selected_color" und "unselected_color".

Vin Norman
quelle
1
if (Build.VERSION.SDK_INT> = 23) {Es funktioniert} else { stackoverflow.com/a/36161252/8072092 }
Joonsoo
@joonsoo funktioniert auf Versionen unter 23. Ich verwende in Projekten bis API 19.
Vin Norman
43
private void setupTabIcons() {
    tabLayout.getTabAt(0).setIcon(tabIcons[0]);
    tabLayout.getTabAt(1).setIcon(tabIcons[1]);
    tabLayout.getTabAt(2).setIcon(tabIcons[2]);
    tabLayout.getTabAt(3).setIcon(tabIcons[3]);

    tabLayout.getTabAt(0).getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);


    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tab.getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            tab.getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}
Nurcahyadin
quelle
Es hat am Anfang gut funktioniert, wenn Sie die Anwendung zum ersten Mal schließen und öffnen und mit der von Ihnen angegebenen Farbe beginnen.
Sam
Um dies zu verhindern, können Sie beim Aufrufen setCurrentItem(0)der onBackButton()Methode eine Instanz von viewPager aus der Aktivität aufrufen. Der Benutzer wird immer beim ersten Fragment zurückgegeben, wenn er versucht, die App zu beenden .
Dusan Dimitrijevic
Sie können tab.getIcon () verwenden. clearColorFilter (); Filter entfernen
Ahmad Dehnavi
2
setOnTabSelectedListener ist veraltet. Verwenden Sie stattdessen addOnTabSelectedListener. developer.android.com/reference/android/support/design/widget/…
Red M
37

Sie können eine ColorStateList verwenden.

Erstellen Sie zunächst eine XML-Datei (z. B. /color/tab_icon.xml), die so aussieht und die verschiedenen Farbtöne für verschiedene Zustände definiert:

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

    <item android:color="@color/icon_light_inactive" />
</selector>

Fügen Sie dies dann Ihrem Code hinzu:

ColorStateList colors;
if (Build.VERSION.SDK_INT >= 23) {
    colors = getResources().getColorStateList(R.color.tab_icon, getTheme());
}
else {
    colors = getResources().getColorStateList(R.color.tab_icon);
}

for (int i = 0; i < tabLayout.getTabCount(); i++) {
    TabLayout.Tab tab = tabLayout.getTabAt(i);
    Drawable icon = tab.getIcon();

     if (icon != null) {
        icon = DrawableCompat.wrap(icon);
        DrawableCompat.setTintList(icon, colors);
    }
}

Zuerst holen Sie sich die ColorStateList aus Ihrem XML (die Methode ohne Thema ist veraltet, aber für Geräte vor Marshmallow erforderlich). Anschließend legen Sie für das Symbol jeder Registerkarte die TintList für die ColorStateList fest. Verwenden Sie DrawableCompat (Unterstützungsbibliothek), um auch ältere Versionen zu unterstützen.

Das ist es!

Felix Edelmann
quelle
4
Dies ist die bisher beste Lösung, da es nicht bedeutet, die Symbolfarbe manuell zu ändern
xleon
Ich nicht, aber Sie müssen den letzteren Code erst in die onCreate (..) -Methode Ihrer Aktivität einfügen, nachdem das TabLayout (benannt tabLayout) initialisiert wurde.
Felix Edelmann
Können wir dies auf eine SVG-Symboldatei anwenden?
Red M
Sie können svg in Android überhaupt nicht verwenden (ohne zusätzliche Bibliotheken), aber meine Lösung funktioniert auch mit Android Vector Drawables (die ähnliche Vorteile wie svg haben).
Felix Edelmann
Ihre Lösung funktioniert, aber nicht für Android 23, alle Registerkarten haben dieselbe Farbe und es ist die inaktive Farbe. Irgendwelche Gedanken warum oder eine Problemumgehung?
John
17

Dafür müssen Sie Registerkartensymbole mithilfe der Auswahlklasse für jede Registerkarte wie folgt anpassen:

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

Anshul Tyagi
quelle
Bei dieser Methode ist es also dieselbe wie bei der in der Frage beschriebenen? Ich muss zwei Zeichen für jedes Tab-Symbol finden, das ich im Layout habe (eines von jeder Farbe).
Weg
genau. Zur weiteren Verdeutlichung bearbeiten Sie Ihre Frage mit Code.
Anshul Tyagi
9

Fügen Sie dies unter res > colorsVerzeichnis hinzu:

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

Fügen Sie Code in der Registerkartenansicht in XML hinzu:

app:tabIconTint="@color/selector_tab"
Arjun Verma
quelle
1
if (Build.VERSION.SDK_INT> = 23) {Es funktioniert} else { stackoverflow.com/a/36161252/8072092 }
Joonsoo
5

Warum verwenden Sie für Ihre Symbole keine Symbolschriftarten (wie "Fantastik")? Ändern Sie dann die Schriftart des Tabulatortextes in das gewünschte Schriftart-Symbol .ttf und genießen Sie es, die ausgewählte Textfarbe in Ihre Tabulator-Symbole zu ändern!

Ich selbst habe diese Methode angewendet und sie ist wirklich schön und sauber :)

Richten Sie zunächst die Titel der gewünschten Symbolschriftart ein:

in string.xml:

    <string name="ic_calculator">&#xf1ec;</string>
    <string name="ic_bank">&#xf19c;</string>

dann in MainActivity.Java:

    private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new FragmentBank(), getString(R.string.ic_bank));
    adapter.addFragment(new FragmentCalculate(), getString(R.string.ic_calculator));
    viewPager.setAdapter(adapter);
    }

Dann sollten Sie die Schriftart von Tab-Titeln in font-awesome ändern:

    Typeface typeFaceFont = Typeface.createFromAsset(getAssets(), "fontawesome-webfont.ttf");

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
    int tabsCount = vg.getChildCount();
    for (int j = 0; j < tabsCount; j++) {
        ViewGroup vgTab = (ViewGroup) vg.getChildAt(j);
        int tabChildsCount = vgTab.getChildCount();
        for (int i = 0; i < tabChildsCount; i++) {
            View tabViewChild = vgTab.getChildAt(i);
            if (tabViewChild instanceof TextView) {
                ((TextView) tabViewChild).setTypeface(typeFaceFont);
            }
        }
    }

Und zu guter Letzt legen Sie in Ihrer zugehörigen XML-Datei die Farbe für tabTextColor und tabSelectedTextColor fest:

<android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="horizontal"
        android:background="@color/colorPrimaryDark"
        app:tabSelectedTextColor="@color/colorAccent"
        app:tabTextColor="@color/textColorPrimary"
        app:tabIndicatorColor="@color/colorAccent"
        app:tabMode="fixed"
        app:tabGravity="fill"/>
</android.support.design.widget.TabLayout>

und in colours.xml:

<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="colorHighlight">#FFFFFF</color>
    <color name="textColorPrimary">#E1E3F3</color>
</resources>
par4301
quelle
Symbolschriftarten funktionieren auf einigen Geräten nicht. Bitte mit Vorsicht verwenden.
Shanks
4

Überprüfen Sie den folgenden Code. Passen Sie Ihr Symbol an, eines ist Farbe und ein anderes ist keine Farbe.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/mybookings_select" android:state_selected="true"/><!-- tab is selected(colored icon)-->
<item android:drawable="@drawable/mybookings" /><!-- tab is not selected(normal no color icon)-->

Prathap Badavath
quelle
2

In Bezug auf die zweite Antwort, die zeigt, wie die Farbe separat eingestellt wird, fragen sich viele Leute möglicherweise, wie sie die Farbe des ersten Symbols entfernen können, während sie zum nächsten wechseln. Was Sie tun können, ist wie folgt:

private void setupTabIcons() {
tabLayout.getTabAt(0).setIcon(tabIcons[0]);
tabLayout.getTabAt(1).setIcon(tabIcons[1]);
tabLayout.getTabAt(2).setIcon(tabIcons[2]);
tabLayout.getTabAt(3).setIcon(tabIcons[3]);

tabLayout.getTabAt(0).getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(1).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(2).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
tabLayout.getTabAt(3).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);


tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        tab.getIcon().setColorFilter(Color.GREEN,PorterDuff.Mode.SRC_IN);

    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
        //for removing the color of first icon when switched to next tab
        tablayout.getTabAt(0).getIcon().clearColorFilter();
        //for other tabs
        tab.getIcon().clearColorFilter();

    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }
});}

Ich hätte die zweite Antwort kommentiert, hatte aber nicht genug Ruf dafür! Es tut uns leid. Aber bitte folgen Sie, dass Sie Ihre Zeit und Ihre Kopfschmerzen sparen würden! Viel Spaß beim Lernen

Alok
quelle
2

Sie können verwenden addOnTabSelectedListener, es funktioniert für mich.

tablayout = findViewById(R.id.viewall_tablayout);
pager = findViewById(R.id.viewall_pager);
adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragments(new RestFragment(),"Restaurant");
adapter.addFragments(new BarFragment(),"Bar");
adapter.addFragments(new HotelFragment(),"Hotel");
adapter.addFragments(new CoffeeFragment(),"Coffee Shop");
pager.setAdapter(adapter);
tablayout.setupWithViewPager(pager);

tablayout.getTabAt(0).setIcon(R.drawable.ic_restaurant);
tablayout.getTabAt(1).setIcon(R.drawable.ic_glass_and_bottle_of_wine);
tablayout.getTabAt(2).setIcon(R.drawable.ic_hotel_black_24dp);
tablayout.getTabAt(3).setIcon(R.drawable.ic_hot_coffee);

tablayout.getTabAt(0).getIcon().setTint(getResources().getColor(R.color.colorAccent,getTheme()));
tablayout.getTabAt(1).getIcon().setTint(getResources().getColor(R.color.colorAccent,getTheme()));
tablayout.getTabAt(2).getIcon().setTint(getResources().getColor(R.color.colorAccent,getTheme()));
tablayout.getTabAt(3).getIcon().setTint(getResources().getColor(R.color.colorAccent,getTheme()));
tablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        tab.getIcon().setTint(getResources().getColor(R.color.colorPrimary,getTheme()));
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
        tab.getIcon().setTint(getResources().getColor(R.color.colorAccent,getTheme()));
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }
});
Shakthi Dilshan
quelle
1

Eine Möglichkeit, das Symbol "hervorzuheben", besteht darin, auf die Bildansicht zuzugreifen und den Farbfilter einzustellen. Versuchen Sie es mit der ImageCiew-Methode setColorFilter (int color) und wenden Sie die Farbe Weiß an.

Yaw Asare
quelle
ja , aber wie können wir Imageview zugreifen , wenn Tab ausgewählt
Erum
1

tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {...} Wurde veraltet. Eher verwenden

tabLayout.addOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            int tabIconColor = ContextCompat.getColor(context, R.color.tabSelectedIconColor);
            tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            int tabIconColor = ContextCompat.getColor(context, R.color.tabUnselectedIconColor);
            tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
Ememobong AkpanEkpo
quelle
-1

Wenn Sie meine bevorzugte Antwort von hier aus mit der ColorStateList erweitern , können Sie die folgende Lösung verwenden, wenn Sie benutzerdefinierte Registerkarten verwenden.

Richten Sie Registerkarten in der XML-Datei Ihrer Aktivität ein

 ...

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

    <android.support.design.widget.TabItem
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout="@layout/nav_bar_tab_item"/>

    <android.support.design.widget.TabItem
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout="@layout/nav_bar_tab_item"/>
</android.support.design.widget.TabLayout>

...

Und benutzerdefiniertes Registerkartenlayout nav_bar_item.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
android:id="@+id/nav_bar_item_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingEnd="@dimen/_5sdp"
android:paddingStart="@dimen/_5sdp">

<ImageView
    android:id="@+id/item_img"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>

<TextView
    android:id="@+id/item_description"
    android:layout_width="wrap_content"
    android:gravity="center"

<!-- Use selector here to change the text color when selected/unselected -->
    android:textColor="@color/nav_bar_icons_color"

    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/item_img"/>

</android.support.constraint.ConstraintLayout>

In Ihrer Tätigkeit

    tabLayout = findViewById(R.id.main_tablayout);

    ConstraintLayout navMyHotelLayout = (ConstraintLayout) tabLayout.getTabAt(0)
            .getCustomView();
    tab1Icon = navMyHotelLayout.findViewById(R.id.item_img);
    tab1TextView = navMyHotelLayout.findViewById(R.id.item_description);

    tab1Icon.setImageResource(R.drawable.ic_tab1);

    // Use the selector here to change the color when selected/unselected
    tintImageViewSelector(tab1Icon, R.color.nav_bar_icons_color);

    tab1TextView.setText("tab 1");

    ConstraintLayout navTtdLayout = (ConstraintLayout) tabLayout.getTabAt(1)
            .getCustomView();
    tab2Icon = navTtdLayout.findViewById(R.id.item_img);
    tab2View = navTtdLayout.findViewById(R.id.item_description);

    tab2Icon.setImageResource(R.drawable.ic_tab2);
    tintImageViewSelector(tab2Icon, R.color.nav_bar_icons_color);
    tab2TextView.setText("tab 2");

Und fügen Sie diese Hilfsfunktionen für den Farbwechsel hinzu

public static void tintDrawableSelector(Drawable vd, final @ColorRes int clrRes, Context context) {

    DrawableCompat.setTintList(vd, ContextCompat.getColorStateList(context, clrRes));
}

public static void tintImageViewSelector(ImageView imgView, final @ColorRes int clrRes, Context context) {

    tintDrawableSelector(imgView.getDrawable(), clrRes);
}

Schließlich der Selektor nav_bar_icons_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/white" android:state_checked="true"/>
    <item android:color="@android:color/white" android:state_selected="true"/>
    <item android:color="@android:color/black"/>
</selector>
NikiFo
quelle
-1

Überprüfen Sie den folgenden Code:

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        if(tab.getPosition() == 0){
            tabLayout.getTabAt(0).setIcon(tabIcons1[0]);
        }
        if(tab.getPosition() == 1){
            tabLayout.getTabAt(1).setIcon(tabIcons1[1]);
        }
        if(tab.getPosition() == 2){
            tabLayout.getTabAt(2).setIcon(tabIcons1[2]);
        }
    }
    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
        tabLayout.getTabAt(0).setIcon(tabIcons[0]);
        tabLayout.getTabAt(1).setIcon(tabIcons[1]);
        tabLayout.getTabAt(2).setIcon(tabIcons[2]);
    }
    @Override
    public void onTabReselected(TabLayout.Tab tab) {
    }
});
Karunya Nepolian
quelle
Dies funktioniert nicht mit Materialthemen wie Theme.MaterialComponents.DayNight
Kishan Solanki
-1

Sie können die Textfarbe der ausgewählten Registerkarte mithilfe des folgenden XML-Attributs des Registerkartenlayouts ändern:

app:tabSelectedTextColor="your desired color"

Um die Symbolfarbe der ausgewählten Registerkarte anzupassen, müssen Sie den Selektor verwenden. Erstellen Sie eine XML-Datei unter einem zeichnbaren Ordner:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:color="selected_item_color" android:state_activated="true" />
   <item android:color="unselected_item_color" />
</selector> 

und fügen Sie diesen Selektor wie folgt zum XML-Attribut des Registerkartenlayouts hinzu:

app:tabIconTint="@drawable/name_of_file"
Shrinivasan
quelle
Funktioniert nicht. Abgesehen davon, dass es nicht funktioniert, sollten Sie es als solches markieren, wenn Ihr name_of_file drawable / name_of_file.xml ist. Andernfalls lassen Sie den Leser raten, was Sie meinen.
Mitch
name_of_file gibt dem Leser den Namen seiner eigenen zeichnbaren Datei an.
Shrinivasan
-1

Führen Sie jeweils die folgenden Schritte aus.

app / src / main / res / values ​​/ Farben.xml (Zu Farben.xml hinzufügen)

<color name="icon_enabled">#F3D65F</color>
<color name="icon_disabled">#FFFFFF</color>

app / src / main / res / color / custom_tab_icon.xml (Erstellen Sie einen Ordner mit dem Namen color in res. Erstellen Sie eine benutzerdefinierte Registerkarte icon.xml im Ordner.)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:color="@color/icon_enabled" android:state_selected="true"/>
 <item android:color="@color/icon_disabled" android:state_selected="false"/>
</selector>

app / src / main / res / drawable / ic_action_settings.png (Erstellen)

Doppelklicken Sie auf action_settings, um es hinzuzufügen

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="21.6"
android:viewportHeight="21.6"
android:tint="@color/custom_tab_icon">
<group android:translateX="-1.2"
  android:translateY="-1.2">
  <path
      android:fillColor="#FF000000"
 android:pathData="M19.1,12.9a2.8,2.8 0,0 0,0.1 -0.9,2.8 2.8,0 0,0 -0.1,-0.9l2.1,-1.6a0.7,0.7 0,0 0,0.1 -0.6L19.4,5.5a0.7,0.7 0,0 0,-0.6 -0.2l-2.4,1a6.5,6.5 0,0 0,-1.6 -0.9l-0.4,-2.6a0.5,0.5 0,0 0,-0.5 -0.4H10.1a0.5,0.5 0,0 0,-0.5 0.4L9.3,5.4a5.6,5.6 0,0 0,-1.7 0.9l-2.4,-1a0.4,0.4 0,0 0,-0.5 0.2l-2,3.4c-0.1,0.2 0,0.4 0.2,0.6l2,1.6a2.8,2.8 0,0 0,-0.1 0.9,2.8 2.8,0 0,0 0.1,0.9L2.8,14.5a0.7,0.7 0,0 0,-0.1 0.6l1.9,3.4a0.7,0.7 0,0 0,0.6 0.2l2.4,-1a6.5,6.5 0,0 0,1.6 0.9l0.4,2.6a0.5,0.5 0,0 0,0.5 0.4h3.8a0.5,0.5 0,0 0,0.5 -0.4l0.3,-2.6a5.6,5.6 0,0 0,1.7 -0.9l2.4,1a0.4,0.4 0,0 0,0.5 -0.2l2,-3.4c0.1,-0.2 0,-0.4 -0.2,-0.6ZM12,15.6A3.6,3.6 0,1 1,15.6 12,3.6 3.6,0 0,1 12,15.6Z"/>
</group>
</vector>
Beytullah
quelle