仅针对指定图标在NavigationView中禁用颜色色调

17

我需要在NavigationView中为一些图标禁用色彩渲染,因为它们的颜色定义了类别类型。我该怎么做?
下面的图片展示了我的问题:
这里输入图片描述


你找到解决方案了吗? - Thomas Vos
不,很遗憾。 - Denis Sologub
@Wax 你找到解决方案了吗?我需要将一个项目使用两种颜色,其余部分为灰色。 - sanjeev
@sanjeev 我已经记不清了,老实说,但似乎你只能准备几个ColorTintLists并手动设置每个项目(在代码中)。 - Denis Sologub
@Шах 是的,我们可以这样做。但是你如何设置所选图标的默认颜色?你是在告诉我这是不可能的吗? - sanjeev
显示剩余2条评论
5个回答

20
navview.setItemIconTintList(null);

祝好运!


2
它禁用了所有项目的色彩色调。 - Denis Sologub
抱歉,我的错。然后你可以使用像这样的选择器:https://dev59.com/7F0Z5IYBdhLWcg3w4jdy - Robert Banyai
我的问题是我需要使用色调,但不是所有项目都需要使用,只有那些没有定义某个类别的项目需要使用。ColorTintList 应用于 NavigationView 中的所有项目。 - Denis Sologub
1
你尝试过以编程方式获取菜单项并修改该项的色调吗? - Robert Banyai
我尝试在创建菜单时将NavigationView中的ColorTintList设置为null,并使用DrawableCompat对图标进行着色,但它没有起作用。我的所有图标都变成了黑色。 - Denis Sologub

6
如果您想在选择时更改图标颜色,下面是可能的答案: 动态更改Android导航视图项颜色 否则,您可以设置 navview.setItemIconTintList(null); 这将给出原始图标颜色。您可以根据需要使用彩色和灰色图标。

我需要为不同的项目制作不同颜色的状态列表。 - Denis Sologub
我不知道如何做到这一点。 - Denis Sologub
在选择和取消选择时喜欢什么? - Android Geek
现在,我会发布一张图片,以便它能够被理解(不知道如何用英语表达)。 - Denis Sologub

3
如果这对某人仍然有用,我们最近为类似问题找到了解决方案。
虽然在API级别<26的情况下无法在单个项目上设置自定义色调列表,但您可以单独设置色调模式。这对我们起作用了。
val itemsWithoutTint: List<Int> = listOf(12345)
for (i in 0 until getMenu().size()) {
    val item = getMenu().getItem(i)
    if (item.itemId in itemsWithoutTint) {
        MenuItemCompat.setIconTintMode(item, PorterDuff.Mode.DST)
    }
}

通过将TintMode设置为DST(https://developer.android.com/reference/android/graphics/PorterDuff.Mode),源(在这种情况下是色调颜色)被忽略,目标(要着色的图标)保持不变。

2
对于使用 Kotlin 的用户,这就是实现方法。
val bottomNavigationView: BottomNavigationView = findViewById(R.id.bottomnavigationhome)

// * THIS ONE 
bottomNavigationView.itemIconTintList = null

-3
 Menu menuNav = navigationView.getMenu();
 MenuItem menuItem = menuNav.findItem(R.id.nav_subjects);

 // Disable a tint color
 menuItem.setChecked(false);

希望这回答了你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接