如何给单个NavigationView MenuItem图标着色?

时间:2019-05-16 08:45:50

标签: android navigationview

我有一个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);

我尝试了以下所有方法。

  1. setColorFilter()
noAdsItem.getIcon().setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
  1. 包装可绘制对象并设置色调
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));
  1. 更改可绘制对象并设置色调
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。有任何想法吗?预先感谢。

0 个答案:

没有答案