Как изменить цвет выбранного значка в BottomNavigationView, используя активность вместо фрагмента в Android Studio? - PullRequest
0 голосов
/ 05 ноября 2019

Я использую активность вместо фрагмента в BottomNavigationView. Я хочу изменить цвет значка активной активности при переключении с одной активности на другую. Но как-то не смог. Как изменить цвет выбранного значка?

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>

Макет BottomNavigationViewXML:

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

Плейлист:

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

Профиль:

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

1 Ответ

0 голосов
/ 05 ноября 2019

Изменить значок и выбранный значок

Элемент навигации (включая текст и значок) указан в файле меню.

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

Создать файл меню

<?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>

Чтобы поддерживать и значок, и выбранный значок, создайте 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...