我有一个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);
我尝试了以下所有方法。
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);
我正在Pixel 3XL上使用Android Pie。有任何想法吗?预先感谢。