У меня есть NavigationView с установленными селекторами как для оттенка значка, так и для цвета текста.Это выглядит следующим образом.
<android.support.design.widget.NavigationView
android:id="@+id/main_nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start|center"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:itemIconTint="@color/nav_drawer_list_selector"
app:itemTextColor="@color/nav_drawer_list_selector" />
У меня есть несколько пунктов меню, отображаемых в этом NavigationView.Я хочу, чтобы один из них был окрашен по-другому.Я могу получить доступ к элементу следующим образом:
Menu navMenu = navigationView.getMenu();
MenuItem noAdsItem = navMenu.findItem(R.id.item_navigation_purchase_no_ads);
Я испробовал все следующие подходы.
- setColorFilter ()
noAdsItem.getIcon().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
Завершение рисования и настройка оттенка
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.ic_no_ads);
Drawable drawable = noAdsItem.getIcon();
Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(wrappedDrawable, ContextCompat.getColor(this, R.color.content_brand));
Отключение рисования и установка оттенка
drawable.mutate();
drawable.setColorFilter(ContextCompat.getColor(this, R.color.content_brand), PorterDuff.Mode.SRC_IN);
drawable.setTint(ContextCompat.getColor(this, R.color.content_brand));
Я пытался использовать цветной значок в качестве ресурса;он отменяется селектором.Я попытался удалить селектор itemIconTint и затем тонировать значок программно.Все эти попытки были безуспешными.
Я знаю, что возможно, например, раскрасить текст.Я использовал подход SpannableString, и он сработал.
SpannableString spanString = new SpannableString(menuItem.getTitle().toString());
spanString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(this, color)), 0, spanString.length(), 0);
menuItem.setTitle(spanString);
Я использую Android Pie на Pixel 3XL.Есть идеи?Заранее спасибо.