如何修改BottomNavigationView中单个菜单项的图标尺寸?
你当前通过全局样式设置itemIconSize会统一修改所有菜单项的图标大小,要单独调整某一项的尺寸,可以通过代码动态定位目标菜单项的图标ImageView,再修改它的布局参数。
实现步骤
- 定义大图标尺寸(可选,也可直接写像素值)
在res/values/dimens.xml中添加自定义尺寸:
<dimen name="bottom_nav_large_icon">36dp</dimen>
- 代码中修改目标菜单项图标
Kotlin 示例
val bottomNav = findViewById<BottomNavigationView>(R.id.your_bottom_nav_id) // 遍历BottomNavigationView的菜单容器 for (i in 0 until bottomNav.childCount) { val container = bottomNav.getChildAt(i) if (container is BottomNavigationMenuView) { // 遍历每个菜单项View for (j in 0 until container.childCount) { val itemView = container.getChildAt(j) as BottomNavigationItemView // 匹配目标菜单项的itemId if (itemView.itemData.itemId == R.id.your_target_item_id) { // 获取图标ImageView(Material组件内置的id) val iconView = itemView.findViewById<ImageView>(com.google.android.material.R.id.icon) // 设置新的尺寸 val largeSize = resources.getDimensionPixelSize(R.dimen.bottom_nav_large_icon) iconView.layoutParams = FrameLayout.LayoutParams(largeSize, largeSize) break } } break } }
Java 示例
BottomNavigationView bottomNav = findViewById(R.id.your_bottom_nav_id); for (int i = 0; i < bottomNav.getChildCount(); i++) { View container = bottomNav.getChildAt(i); if (container instanceof BottomNavigationMenuView) { BottomNavigationMenuView menuView = (BottomNavigationMenuView) container; for (int j = 0; j < menuView.getChildCount(); j++) { BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(j); if (itemView.getItemData().getItemId() == R.id.your_target_item_id) { ImageView iconView = itemView.findViewById(com.google.android.material.R.id.icon); int largeSize = getResources().getDimensionPixelSize(R.dimen.bottom_nav_large_icon); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(largeSize, largeSize); iconView.setLayoutParams(params); break; } } break; } }
注意事项
- 请确保在BottomNavigationView初始化完成后执行这段代码,比如在Activity的
onStart()或Fragment的onViewCreated()方法中调用。 - 替换代码中的
your_bottom_nav_id和your_target_item_id为你自己布局中对应的ID。
内容的提问来源于stack exchange,提问作者MaaAn13
相关产品推荐
相关产品推荐

