如何修改Navigation Drawer图标大小?多种尝试无果求可行方案
我之前也踩过这个坑,默认的Navigation Drawer汉堡图标确实没法直接通过样式配置搞定,不过这几个方法亲测有效,你可以试试:
方法一:直接调整默认图标的Bounds
拿到Toolbar的导航图标后,通过setBounds()强制设置它的宽高,记得把dp转成像素值:
Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); Drawable navIcon = toolbar.getNavigationIcon(); if (navIcon != null) { // 这里的尺寸换成你需要的大小,比如32dp,先转成px int iconSize = getResources().getDimensionPixelSize(R.dimen.nav_icon_size); navIcon.setBounds(0, 0, iconSize, iconSize); toolbar.setNavigationIcon(navIcon); }
别忘了在res/values/dimens.xml里定义尺寸:
<dimen name="nav_icon_size">32dp</dimen>
方法二:替换为自定义尺寸的图标
直接用VectorDrawable或者png图做一个你想要大小的图标,然后替换默认的导航图标:
比如先创建一个res/drawable/nav_hamburger.xml的Vector图标,直接指定宽高:
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="32dp" android:height="32dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:fillColor="@color/white" android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/> </vector>
然后在代码里设置:
toolbar.setNavigationIcon(R.drawable.nav_hamburger);
如果用的是ActionBarDrawerToggle,也可以自定义Toggle的图标尺寸:
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); toggle.setDrawerArrowDrawable(new DrawerArrowDrawable(this) { @Override public int getIntrinsicWidth() { return getResources().getDimensionPixelSize(R.dimen.nav_icon_size); } @Override public int getIntrinsicHeight() { return getResources().getDimensionPixelSize(R.dimen.nav_icon_size); } }); drawerLayout.addDrawerListener(toggle); toggle.syncState();
注意事项
- 如果用VectorDrawable,要确保build.gradle里开启支持:
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
- 不要直接在样式里改
android:navigationIconSize,这个属性在很多版本里不生效,还是代码控制更靠谱。
内容的提问来源于stack exchange,提问作者sanu
相关产品推荐
相关产品推荐

