Отключить значок colorStateList в NavigationView

Сегодня в моем приложении есть значки, которые имеют не только один цвет, но в некоторых случаях и два цвета в зависимости от состояния данных в моем приложении. Это означает, что я не могу использовать тонирование по умолчанию в NavigationView.

Похоже, что с новым NavigationView, если я не укажу ColorStateList для своих значков, используемых в списке, для меня будет создано ColorStateList по умолчанию, которое использует мои colorPrimary и т. д., определенные в моей теме.

Нет ли способа заставить NavigationView прекратить подкрашивать мои значки?


person tskulbru    schedule 03.06.2015    source источник


Ответы (1)


Нет ли способа заставить NavigationView прекратить подкрашивать мои значки?

Конечно есть. Вы можете сделать это программно, используя NavigationView.setItemIconTintList.

И вы можете сделать это в макете XML, используя NavigationView.itemIconTint атрибут.

Программно

yourNavigationView.setItemIconTintList(null);

От XML

<android.support.design.widget.NavigationView
    ...
    app:itemIconTint="@android:color/black" 
    ... />

Результаты

результаты

person adneal    schedule 04.06.2015
comment
Установка его программно была единственным способом, которым я мог заставить его работать. Не знаю, почему я не попробовал это. Я попытался установить для него значение null в xml, но это ничего не дало. В любом случае, спасибо дружище! - person tskulbru; 04.06.2015
comment
Вам необходимо ссылаться на цвет при его применении в XML. Например, @android:color/black. Это связано с тем, как ColorStateList инициализируется в NavigationView. - person adneal; 04.06.2015
comment
Да, я видел это в источниках. Но до сих пор не думал просто сделать это по коду.. :) - person tskulbru; 04.06.2015
comment
Ницца! Меня раздражало то же самое, но я не пытался установить для него значение null в коде. Спасибо, что сообщили нам об этом. Очень признателен! - person KMLong; 04.06.2015
comment
Это применимо к цветным значкам? Или в векторных изображениях? - person RoCk RoCk; 08.02.2016
comment
Правильным способом будет app:itemIconTint="@null" в XML, но конструктор NavigationView проверяет наличие hasValue, что исключает такую ​​возможность. Установка black в XML отличается от установки null программно. Если значок не прозрачен посередине, он становится черным пятном. - person TWiStErRob; 29.03.2016
comment
Как насчет установки app:itemIconTint=@android:color/transparent ? - person Gomino; 30.01.2017
comment
Если вы установите @android:color/transparent, значок станет невидимым - person AgentP; 03.06.2020