You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改BottomNavigationView中单个菜单项的图标尺寸?

自定义BottomNavigationView单个菜单项的图标尺寸

你当前通过全局样式设置itemIconSize会统一修改所有菜单项的图标大小,要单独调整某一项的尺寸,可以通过代码动态定位目标菜单项的图标ImageView,再修改它的布局参数。

实现步骤

  1. 定义大图标尺寸(可选,也可直接写像素值)
    在res/values/dimens.xml中添加自定义尺寸:
<dimen name="bottom_nav_large_icon">36dp</dimen>
  1. 代码中修改目标菜单项图标

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:20:38