BottomNavigationView исходный цвет значка для отмеченных и непроверенных разных

BottomNavigationView Исходный цвет значка Я обнаружил, что здесь можно сохранить тот же цвет значка. Но можно ли сохранить его только тогда, когда значок выделен, и сохранить другой сероватый цвет для невыбранной вкладки? Это мой код для изменения цвета значка.

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:color="@color/colorSecondary"
    android:state_checked="true"/>
<item
    android:color="#bebebe"
    android:state_checked="false"/>

Here in state_checked I tried giving @null but it just makes the icons pinkish. I want to retain the icon color when it is checked. Is it possible?

Примечание. Я также пробовал использовать bNavigationView.setIconTintList (null); что меняет цвет всех значков на исходный.

public class MainActivity extends AppCompatActivity {
 Toolbar toolbar;
 BottomNavigationView bNavigationView;
 BottomNavigationView.OnNavigationItemSelectedListener 
 mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        switch (item.getItemId()) {
            case R.id.navigation_account:
// AS gives me an error here saying setItemIconTintList cannot be applied to (int,null)
                bNavigationView.setItemIconTintList(0,null);
                fragmentTransaction.replace(R.id.content,new AccountFragment()).commit();
                break;
            case R.id.navigation_technical:
                fragmentTransaction.replace(R.id.content,new TechnicalEventsFragment()).commit();
                break;
            case R.id.navigation_corporate:
                fragmentTransaction.replace(R.id.content,new CorporateEventsFragment()).commit();
                break;
            case R.id.navigation_cultural:
                fragmentTransaction.replace(R.id.content,new CulturalEventsFragment()).commit();
                break;
            case R.id.navigation_dashboard:
                fragmentTransaction.replace(R.id.content,new DashboardFragment()).commit();
                break;
        }

        return true;
    }

};

person sanjeev    schedule 15.12.2017    source источник
comment
почему вы используете android:color="@color/colorSecondary"   -  person vm345    schedule 15.12.2017
comment
Когда я не задаю цвет в state_checked, он все равно выглядит розоватым.   -  person sanjeev    schedule 15.12.2017


Ответы (2)


попробуй это

 <?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/colorSecondary"/>
        <item android:color="#bebebe"  />
    </selector>
person Kapil Parmar    schedule 15.12.2017
comment
Я уже пробовал это и цитировал в своем вопросе. Я не хочу, чтобы мой state_checked был colorSecondary. Мне нужен оригинальный цвет значка. - person sanjeev; 15.12.2017
comment
удалите android: color = @ color / colorSecondary и попробуйте - person Kapil Parmar; 15.12.2017
comment
Значок станет розоватым, если я удалю @ color / colorSecondary. - person sanjeev; 15.12.2017
comment
используйте схемы ‹? xml version = 1.0 encoding = utf-8?› ‹xmlns: android = . android.com/apk/res/android ›‹ item android: state_checked = false android: color = # bebebe / ›‹/selector› - person Kapil Parmar; 15.12.2017
comment
Да, я пробовал это уже безуспешно. Он просто делает значки невидимыми, когда он выбран, и отображается серым цветом, когда он не выбран. - person sanjeev; 15.12.2017

Я знаю, что это старый вопрос, но для кого они хотят сохранить цвет значка при использовании этого метода и установить для него значение null setItemIconTintList (ColorStateList tint) - Установите оттенок, который применяется к значкам меню.

это самый простой способ попробовать и дайте мне знать

    bNavigationView = (BottomNavigationView) 


 findViewById(R.id.bottom_navigation);
 bNavigationView.setItemIconTintList(null);

Это самый элегантный и сверхбыстрый способ сделать это.

Примечание: установите для setItemIconTintList значение null, чтобы удалить весь цвет оттенка для значков, но если вам нужен этот эффект для определенного значка, вы можете сделать это внутри onNavigationItemSelected

  bNavigationView.setOnNavigationItemSelectedListener(new 
    BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {


                switch (item.getItemId()) {

                    case R.id.iconOne:
               bNavigationView.setIconTintList(0,null);

       replaceFragment(FirstFragment.newInstance(),"FragmentOne");                            
                    break;
                    case R.id.mySpecificIcon:
                //setIconTintList taking to params the first
                //is the position of the icon wich is array starts from     
                //0    

                bNavigationView.setIconTintList(1,null);

              replaceFragment(FirstFragment.newInstance(),"Fragment2");


                        // mainViewPager.setCurrentItem(3);
                        break;


                }
                return true;
            }
        })
person Mohamed Ayed    schedule 21.12.2017
comment
Привет, Мохамад .. Я уже пробовал это .. он меняет все цвета значков на стандартные. Я хочу, чтобы выбранный значок отображался в исходном цвете, а оставшийся - серым # bebebe - person sanjeev; 22.12.2017
comment
см. обновленный ответ Санджив, я тестировал его для вас, и он работает, если он не с вами, пожалуйста, дайте мне знать - person Mohamed Ayed; 24.12.2017
comment
Привет, Мохаммад. Android Studio выдает ошибку, когда я использую bNavigationView.setIconTintList (0, null); - person sanjeev; 25.12.2017
comment
setIconTintList не может быть применен к (int, null) - это ошибка. Пожалуйста, обратитесь к вопросу, чтобы проверить мой код. - person sanjeev; 25.12.2017
comment
вывести здесь ошибку при использовании bNavigationView.setIconTintList (0, null); - person Mohamed Ayed; 26.12.2017
comment
Ошибка: (28, 36) ошибка: метод setItemIconTintList в классе BottomNavigationView нельзя применить к данным типам; требуется: ColorStateList найдено: int, ‹null› причина: фактические и формальные списки аргументов различаются по длине - person sanjeev; 26.12.2017
comment
Не используйте setItemIconTintList. используйте bNavigationView.setIconTintList (1, null); вместо этого, если вы прочитаете мой обновленный ответ, вы обнаружите, что я использую bNavigationView.setIconTintList (1, null); not setItemIconTintList - person Mohamed Ayed; 26.12.2017