Android: Untere Navigationsansicht – Ändern Sie das Symbol des ausgewählten Elements

Lesezeit: 5 Minuten

Benutzer-Avatar
Adarsh

Ich habe hinzugefügt BottomNavigationView in meiner Anwendung wie.

main.xml

<android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:itemBackground="@color/colorPrimary"
        app:itemIconTint="@color/white"
        app:itemTextColor="@color/white"
        app:menu="@menu/bottom_navigation_main" />

bottom_navigation_main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_favorites"
        android:enabled="true"
        android:icon="@drawable/ic_favorite_white_24dp"
        android:title="@string/text_favorites"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_schedules"
        android:enabled="true"
        android:icon="@drawable/ic_access_time_white_24dp"
        android:title="@string/text_schedules"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_music"
        android:enabled="true"
        android:icon="@drawable/ic_audiotrack_white_24dp"
        android:title="@string/text_music"
        app:showAsAction="ifRoom" />
</menu>

Hauptaktivität klicken

bottomNavigationView.setOnNavigationItemSelectedListener(
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.action_favorites:
                        //need change icon of favotites here.
                    case R.id.action_schedules:

                    case R.id.action_music:

                }
                return true;
            }
        });

Ich möchte das Symbol der unteren Navigation der ausgewählten Position ändern. Wie können wir diese Funktion erreichen, wenn der Benutzer auf ein Element klickt?

(Wenn der Benutzer auf ein Element geklickt hat, wechselt das Symbol zu einem anderen)

  • Jeder, der Selektoren in seinem Menü hat und die Farben der Selektoren anstelle der Standardfarben der unteren Navigationsleiste anzeigen möchte, überprüft diese Antwort stackoverflow.com/a/44516194/6039240

    – Amr

    13. Januar um 7:03 Uhr

Benutzer-Avatar
kuljeet singh

Sie können einfach einen Drawable-Selektor im Drawable-Ordner erstellen und das Bild kann entsprechend dem Status des in der Ansicht verwendeten Widgets geändert werden

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

  • Das funktioniert besser als die programmatische Methode. Der Zustand ist eigentlich anzugeben android:state_checked nicht android:state_selected

    – Yuntao

    27. April 2017 um 21:19 Uhr


  • Hier sollten Sie sich bewerben: <android.support.design.widget.NavigationView . . app:itemTextColor="@drawable/your_selector"/>

    – sfmirtalebi

    11. Mai 2018 um 18:10 Uhr


  • Es funktioniert nicht in der Kitkat-Android-Version. App stürzt ab.

    – Hitesh Sarsava

    9. Juni 2018 um 18:01 Uhr

  • @ASN entfernt den Farbton aus dem unteren Navigations-XML-Code, um die ursprüngliche Farbe der Symbole wiederherzustellen

    – Abhinav Upadhyay

    27. Oktober 2018 um 14:13 Uhr

  • @AbhinavUpadhyay Das Entfernen von itemIconTint aus XML funktioniert immer noch nicht. bottomNavigationView.setItemIconTintList(null) ist die Lösung. Kennen Sie das Äquivalent in XML?

    – VipiN Negi

    5. März 2019 um 10:51 Uhr

  • Funktioniert gut Thnx.

    – Shanmugapriyan M

    20. Dezember 2017 um 6:12 Uhr

  • Danke, Ihre Antwort hat mir geholfen, das Originalsymbol anstelle des farbigen Rechtecks ​​anzuzeigen.

    – Chirag Jain

    22. September 2018 um 10:31 Uhr


  • Dies ist die Antwort auf alle oben genannten Probleme. Wenn Sie die Hintergrundauswahl festlegen, wird sie ohne diese niemals funktionieren, danke

    – Odaym

    5. Oktober 2018 um 14:00 Uhr

  • Es funktioniert gut. Vergessen Sie nicht, einen Selektor mit Drawables zu erstellen und ihn in der Menüdatei zu verwenden

    – Djek-Grif

    11. Oktober 2018 um 11:06 Uhr

  • Es hat funktioniert, aber ich bin neugierig, das Äquivalent für das XML-Layout-Attribut zu finden. “@null” hat bei mir nicht funktioniert.

    – VipiN Negi

    5. März 2019 um 10:00 Uhr

Mit dieser Methode können Sie Ihr Symbol dynamisch festlegen.

R.id.navigation_menu ist Ihre Artikel-ID in Ihrer R.menu.menu_bottom_navigation.

val menuItem = bottomNavigationView.menu.findItem(R.id.navigation_menu)
menuItem.setIcon(R.drawable.ic_icon)

Benutzer-Avatar
Henrique Cesar Madeira

Sie müssen das Symbol beim Klicken zurücksetzen, und dann müssen Sie auf dem Schaltergehäuse nur das einstellen, das Sie ändern müssen, sodass sich das Symbol nur ändert, wenn es ausgewählt ist.

Menu menu = bottomNavigationView.getMenu();
menu.findItem(R.id.action_favorites).setIcon(favDrawable);

switch (item.getItemId()) {
                case R.id.action_favorites:
                     item.setIcon(favDrawableSelected);
                case R.id.action_schedules:
                case R.id.action_music:
            }

Benutzer-Avatar
Subind Suresh

Die obige Antwort von Ajay Singh https://stackoverflow.com/a/57248961/9793057 hat mir geholfen, ebenso wie die Antworten von oben.

Der folgende Code im res->drawable Ordner (selector_stock_bottom_nav_view.xml)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/button_and_tab_color" android:state_checked="true" />
    <item android:color="@android:color/darker_gray" android:state_checked="false" />
</selector>

Dies sind die Attribute in meiner unteren Navigationsansicht

<com.google.android.material.bottomnavigation.BottomNavigationView

        app:itemIconTint="@drawable/selector_stock_bottom_nav_view" //To change icon color
        app:itemTextColor="@drawable/selector_stock_bottom_nav_view" //To change text color
        app:itemTextAppearanceActive="@style/stockBottomNavigationView.Active" //To change size of text during active state
        app:itemTextAppearanceInactive="@style/stockBottomNavigationView.InActive"
        app:menu="@menu/bottom_navigation_menu"
        app:labelVisibilityMode="labeled"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_gravity="bottom"
        app:selectedBackgroundVisible="false"
        android:id="@+id/stock_bottom_navigation"/>

Ich habe “BottomNavigationView.setItemIconTintList(null)” NICHT irgendwo in meinem Code verwendet.

Jetzt Hier kommt das wichtigste Stück Codestellen Sie sicher, dass im Listener der unteren Navigationsansicht “TRUE” zurückgegeben wird, d. h.

private BottomNavigationView.OnNavigationItemSelectedListener stockBottomNavListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            return true;

        }
    };

Bonus: Um die Größe des aktiven/inaktiven Textstatus zu ändern, fügen Sie den folgenden Code in die Datei styles.xml ein

    <style name="stockBottomNavigationView.InActive" parent="@style/TextAppearance.AppCompat.Caption">
        <item name="android:textSize">7sp</item>
    </style>

    <style name="stockBottomNavigationView.Active" parent="@style/TextAppearance.AppCompat.Caption">
        <item name="android:textSize">8sp</item>
    </style>

Die obige Antwort ist eine Zusammenstellung von Antworten aus verschiedenen Antworten in Stackoverflow in Bezug auf untere Navigationsansichten, Änderung der Symbol- und Textfarbe/-größe.

  • Tolle Arbeit, ein +1 für mich. Dies ergänzt die ursprüngliche Frage, die mit noch mehr Flair gestellt wurde.

    – A. Petrizza

    22. Mai 2021 um 4:20 Uhr

1010590cookie-checkAndroid: Untere Navigationsansicht – Ändern Sie das Symbol des ausgewählten Elements

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

Privacy policy