【问题标题】:Navigation drawer menu icon is not displayed correctly导航抽屉菜单图标未正确显示
【发布时间】:2023-03-27 14:28:01
【问题描述】:

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

这里是菜单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>

【问题讨论】:

  • 尝试将图片放入drawable文件夹
  • @cwfei,我尝试将图像放入可绘制文件夹,但它也返回相同的错误..
  • 当您将图像移动到可绘制文件夹时,您是否将 xml 文件中的引用更新为 android:icon="@drawable/ic_recent"
  • @GeorgeMulligan,是的,我做到了。当我点击@mipmap/ic_recent 时,它会将我引导至正确的图标。
  • 澄清一下,我们想尝试将其从 @mipmap/ic_recent 更改为 @drawable/ic_recent,就像您的其他图标一样,然后确保 ic_recent 图标位于您的 drawable 文件夹中。那是你做的吗?

标签: android menu icons


【解决方案1】:

现在可以通过从setItemIconTintList(null) 删除图标的色调效果来工作。把下面这行代码放在navigationView下面。

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

【讨论】:

  • 感谢 Michelletbs,navigationView.setItemIconTintList(null);解决了我的问题。
  • 很好的解决方案,效果很好。似乎向后兼容,棒棒糖前仍然有效。谢谢!
  • 太棒了!另一种解决方案,但仅用于交换两种颜色:stackoverflow.com/questions/30967851/…
  • 谢谢@michelletbs
  • 感谢@michelletbs,一切正常。
【解决方案2】:

您是否尝试更改为另一个图像以查看它是否正在显示?

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

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

【讨论】:

  • 我已经用模板预先生成的图像替换了它的工作。 android:icon="@drawable/ic_menu_gallery",但是如果我把我自己的自定义图像显示为灰色方块。
  • 嗨@Weverton Peron,现在可以通过输入此代码从图标中删除色调模式。 navigationView.setItemIconTintList(null);
【解决方案3】:

如果您仍然没有通过删除色调解决问题,您可能希望将资源文件移动到可绘制(使用 Poject 视图)而不是像我一样的 drawable-anydpi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多