0

我正在尝试将 NavigationView 中的项目菜单图标设置为 TextDrawable。对于使用TextDrawable 库的 textDrawable 即时通讯,但是一旦我为菜单项设置图标,它只会显示一个黑色圆圈而不是生成的可绘制对象。

我确实尝试过我的代码在 NavigationView 之外生成 TextDrawable,它显示了我需要的内容,但我无法让它显示为我的菜单项的图标。

要生成 TexDrawable:

private Drawable getLetterDrawable(String letter){
    return TextDrawable.builder()
            .beginConfig()
            .width(20)  // width in px
            .height(20) // height in px
            .endConfig()
            .buildRect(letter, Color.RED);
}

设置图标:

        ...
        navigationView.inflateMenu(R.menu.menu_drawer_users);  
        Menu menu = navigationView.getMenu();
        menu.add("Item text here").setIcon(getLetterDrawable("A"));
        ...

这是意想不到的结果:

执行结果

编辑: 当我设置R.mipmap.ic_launcher为图标时,我得到了 android 图标,但也是灰色的,所以我只能看到它的边框。似乎可绘制对象在使用时被“着色”了menuItem.setIcon()

我确实尝试过以下操作,但没有成功:

        MenuInflater mi = getMenuInflater();
        mi.inflate(R.menu.menu_drawer, menu);
        menu.add("Test");
        menu.getItem(0).setIcon(R.mipmap.ic_launcher);
        menu.getItem(0).getIcon().clearColorFilter();
        menu.getItem(0).getIcon().invalidateSelf();

问题:如何删除过滤器并以颜色显示我的图标?

编辑 2:根据建议,我确实设法 从Andrea BassonavigationView 对象中删除了色调,但我仍然看不到正方形内的字母。我只看到红色方块,但没有看到里面的字母。

主要问题仍然存在:如何将TextDrawable作为图标放在MenuItem

4

1 回答 1

1

NavigationView有方法setItemIconTintList (ColorStateList tint),这就是你要找的。

AColorStateList是一个 XML 文件,它为不同的状态定义了不同的过滤器。是文档页面。

于 2015-10-21T10:57:08.790 回答