如何在NavigationView中更改菜单项图标的大小?

48

我有以下菜单项:

<item
   android:id="@+id/lock"
   android:checkable="true"
   android:title="@string/lock" >
   <menu>
       <item
          android:id="@+id/block_mess"
          android:checked="true"
          android:icon="@drawable/chantinnhan"
          android:title="@string/block_mess_string" />
        <item
            android:id="@+id/block_call"
            android:checked="false"
            android:icon="@drawable/chancuocgoi"
            android:title="@string/block_call_string" />
        <item
            android:id="@+id/lock_app"
            android:checked="false"
            android:icon="@drawable/khoaungdung"
            android:title="@string/lock_app_string" />
   </menu>
</item>

...还有更多的内容,但它真的很长。

但是图标实在太小了(即使它有256x256的分辨率)。我想把它变大!这可能吗?

这是截图:

输入图像描述

编辑:好的,我们都知道谷歌“锁定”了图标大小。但我想知道,我能否“绕过”这个锁定并制作一些可自定义的东西?


有关这个问题你有什么进展吗?我也卡住了。 - Aman Verma
@AmanVerma仍然没有运气,伙计 :(( - Chris Maverick
我也需要大尺寸的图标,但如果我们找到一个示例应用程序,也许我们可以给开发者发送电子邮件并获取一些知识。 :) - Abdullah Shoaib
可能你做不到。我不能确定,但NavigationView是由Android开发团队为特定用例设计的非常特定的设计工具,可能不是100%可定制的。 - WoogieNoogie
@ChrisMaverick 是的,它可以被定制,但是需要做很多工作来恢复NavigationView当前管理的所有回调和UI效果。 - Abdullah Shoaib
显示剩余13条评论
5个回答

108

你可以通过覆盖 design_navigation_icon_size 属性来更改 navigationView 图标的大小。你可以将其放入 dimens 中,并且由于你正在覆盖私有属性,所以需要包含 tools:override="true"

<dimen name="design_navigation_icon_size" tools:override="true">40dp</dimen>

这是一个相当老的问题,但仍然是正确的答案。已被接受 :D - Chris Maverick
2
这个答案还正确吗?我正在尝试,但是我没有成功,NavigationView组件总是显示相同的大小。 - X-HuMan
1
我刚刚在我的代码上尝试了一下,它仍然可以工作。你是否正在使用SupportLibrary?尝试将你的类扩展到AppCompatActivity。 - Amad Yus
2
为什么你没有提到它需要在dimens文件中! - Kishan Solanki
2
@KishanSolanki124 我已经读了,请再看一遍。 - Amad Yus
显示剩余3条评论

24
在你的xml文件中,最简单的方法是在NavigationView中添加一个属性。只需添加如下代码: app:itemIconSize="12dp"

1
太棒了!Coincident刚刚在4小时前回答了。:D - OhhhThatVarun
1
我不知道为什么只有这个解决方案适用于我。我正在使用com.google.android.material.navigation.NavigationView - Frankey
1
谢谢。这是最好的答案。 - Oke Uwechue

23

解决方案已找到

在 dimens 文件中添加以下内容。

<dimen name="design_navigation_icon_size">48dp</dimen>

10

决定图标大小的主要因素是维度:navigation_icon_size,请查看NavigationMenuItemView类:

 public NavigationMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.mIconSize = context.getResources().getDimensionPixelSize(dimen.navigation_icon_size);
}

因此,我们可以在我们的dimens文件中覆盖属性。

例如:

<dimen name="navigation_icon_size">48dp</dimen>

把这段代码添加到dimens文件中,你会发现它的大小已经改变了。

Before:

enter image description here

After:

enter image description here


2
什么也没有发生,已添加! - Chris Maverick
这太奇怪了...我会尝试找另一种方法来做。 - Zuo VJ
它应该可以工作,事实上,我在我的手机和Genymotion上测试过,都可以工作。或者可能是你做错了什么? - Zuo VJ
我只是在dimes.xml中添加了“dimen”行。并且我正在使用Android Studio的原始导航抽屉。 - Chris Maverick
5
请使用 "design_navigation_icon_size" 替代。谷歌在 Support Library 23 中添加了 "design_" 前缀。 - user3623735
在dimens中为属性名称design_navigation_icon_size创建条目,并添加大小(以pt为单位),它可以正常工作。 - Abhishek

8
根据Google自己设定的设计文档,图标应该设置为14sp。我建议你遵守这个推荐,因为这是所有应用程序都使用的标准。正如你所说,没有应用程序在导航抽屉中具有大图标,因为这不是开发导航抽屉图标时的规范。

enter image description here


如果这篇文章对您有所帮助,能否请您接受并点赞呢?非常感谢 :) - Michele La Ferla
1
我们都知道Google“锁定”了图标大小。但我想问的是,我能否通过编程的方式“绕过”这个锁定呢?不过,给你点赞:D - Chris Maverick
你可以尝试并玩弄实际的导航视图布局XML文件,但我相信Google将其锁定为特定大小。因此,没有办法绕过它。 - Michele La Ferla
1
想知道在链接的文章中哪里提到了图标大小应该为14sp - Alex Sorokoletov
请查看规格部分。 - Michele La Ferla

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