简体   繁体   中英

How do I change the color of the selected icon in BottomNavigationView using Activity instead of Fragment in Android Studio?

I'm using activity instead of fragment in BottomNavigationView . I want to change the color of the active activity icon when switching from one activity to another. But somehow I could not. How do I change the color of the selected icon?

Menu.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/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/title_home"
        app:showAsAction="ifRoom"
        android:enabled="true"/>

    <item
        android:id="@+id/navigation_playlist"
        android:icon="@drawable/ic_playlist_play_black_24dp"
        android:title="@string/title_playlist"
        app:showAsAction="ifRoom"
        android:enabled="true"/>

    <item
        android:id="@+id/navigation_profile"
        android:icon="@drawable/ic_account_circle_black_24dp"
        android:title="@string/title_profile"
        app:showAsAction="ifRoom"
        android:enabled="true"/>
</menu>

selector.xml:

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

Layout BottomNavigationView XML:

<com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        app:itemIconTint="@drawable/selector_bottombar"
        app:itemTextColor="@drawable/selector_bottombar"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" >
    </com.google.android.material.bottomnavigation.BottomNavigationView>

MainActivity:

  BottomNavigationView navView = findViewById(R.id.nav_view);

        navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.navigation_home:
                        break;
                    case R.id.navigation_playlist:
                        Intent a = new Intent(MainActivity.this,Playlist.class);
                        startActivity(a);
                        onStop();
                        break;
                    case R.id.navigation_profile:
                        Intent b = new Intent(MainActivity.this,Profile.class);
                        startActivity(b);
                        onStop();
                        break;
                }
                return false;
            }
        });

Playlist:

   BottomNavigationView navView = findViewById(R.id.nav_view);
        navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.navigation_playlist:
                        break;
                    case R.id.navigation_profile:
                        Intent a = new Intent(Playlist.this,Profile.class);
                        startActivity(a);
                        onStop();
                        break;
                    case R.id.navigation_home:
                        Intent b = new Intent(Playlist.this,MainActivity.class);
                        startActivity(b);
                        onStop();
                        break;
                }
                return false;
            }
        });

Profile:

BottomNavigationView navView = findViewById(R.id.nav_view);
        navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.navigation_profile:
                        break;
                    case R.id.navigation_home:
                        Intent a = new Intent(Profile.this,MainActivity.class);
                        startActivity(a);
                        onStop();
                        break;
                    case R.id.navigation_playlist:
                        Intent b = new Intent(Profile.this,Playlist.class);
                        startActivity(b);
                        onStop();
                        break;
                }
                return false;
            }
        });

Change Icon and Selected Icon

Navigation Item (including text and icon) is specified in a menu file.

<com.google.android.material.bottomnavigation.BottomNavigationView
        ...
        app:menu="@menu/navigation"
        />

Create Menu file

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

    <item
        android:id="@+id/navigation_dailyquote"
        android:icon="@drawable/yy_dailyquote"
        android:title="@string/navigation_dailyquote"/>

        ...
</menu>

To support both icon and selected icon, create res/drawable/yy_dailyquote.xml.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM