导航抽屉菜单图标显示不正确。

12

我想把自定义图标输入到导航抽屉菜单中,但是当我运行应用程序时,它只显示图标的阴影。如何正确显示图片?

enter image description here

这是activity_main_drawer.xml菜单的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/recent_picture"
            android:icon="@mipmap/ic_recent"
            android:title="Import" />
        <item
            android:id="@+id/nav_gallery"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Gallery" />
        <item
            android:id="@+id/nav_slideshow"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="Slideshow" />
        <item
            android:id="@+id/nav_manage"
            android:icon="@drawable/ic_menu_manage"
            android:title="Tools" />
    </group>
</menu>

以下是带有导航视图的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>

在values文件夹中找到了另一个drawables.xml文件。

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<item name="ic_recent_picture" type="drawable">@mipmap/ic_recent</item>
<item name="ic_menu_gallery" type="drawable">@drawable/ic_menu_gallery</item>
<item name="ic_menu_slideshow" type="drawable">@android:drawable/ic_menu_slideshow</item>
<item name="ic_menu_manage" type="drawable">@android:drawable/ic_menu_manage</item>
<item name="ic_menu_share" type="drawable">@android:drawable/ic_menu_share</item>
<item name="ic_menu_send" type="drawable">@android:drawable/ic_menu_send</item>


@GeorgeMulligan,是的,我这样做了。当我点击@mipmap/ic_recent时,它会将我重定向到正确的图标。 - michelletbs
只是想澄清一下,我们希望尝试将其从@mipmap/ic_recent更改为@drawable/ic_recent,就像您的其他图标一样,并确保ic_recent图标位于drawable文件夹中。这就是您所做的吗? - George Mulligan
这就是我一直在努力弄清楚的事情。根据这篇帖子 mipmaps 只应该用于应用程序图标。 - George Mulligan
@GeorgeMulligan,现在它可以工作了!通过使用以下代码从NavigationView中删除tintmode: navigationView.setItemIconTintList(null); - michelletbs
很高兴听到这个!我不得不说我以前从未需要去掉PNG文件的tintmode。 - George Mulligan
显示剩余7条评论
3个回答

37

现在可以通过setItemIconTintList(null)来移除图标的色彩效果。将下面这行代码放在navigationView下面。

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setItemIconTintList(null);
 navigationView.setNavigationItemSelectedListener(this);

2
谢谢Michelletbs,navigationView.setItemIconTintList(null);解决了我的问题。 - Sally
很棒的解决方案,运行非常好。似乎向后兼容,适用于早期版本的安卓系统。谢谢! - TryTryAgain
太棒了!还有另一个解决方案,但仅适用于交换两种颜色,可以在这里找到:https://dev59.com/7F0Z5IYBdhLWcg3w4jdy。 - CoolMind
感谢 @michelletbs - F0r3v3r-A-N00b
谢谢 @michelletbs,这个运行得很好。 - Gyan Swaroop Awasthi

0

你尝试更换另一张图片来查看它是否显示了吗?

<item name="ic_recent_picture" type="drawable">@mipmap/ic_recent</item>

路径 @mipmap 包含正确的图像吗?


我已经用预先生成的模板图像替换了android:icon="@drawable/ic_menu_gallery",它可以正常工作。但是,如果我放置自己定制的图像,则会显示灰色方块。 - michelletbs
嗨@Weverton Peron,现在它可以工作了,通过输入此代码来删除图标的色调模式。 navigationView.setItemIconTintList(null); - michelletbs

0

如果你仍然没有通过去除色彩来解决问题,你可能想要将你的资源文件移动到drawable(使用项目视图)而不是像我一样使用drawable-anydpi。


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