使用最新的材料设计库(com.google.android.material:material:1.6.1)
获取菜单图标视图引用的 id 是com.google.android.material.R.id.navigation_bar_item_icon_view
.
因此,您可以通过编程方式更改特定菜单项的大小BottomNavigationView
像下面的示例:
//find the icon view for the menu item index 1
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView)
val menu = bottomNavigationView.menu
val menuItem = menu.getItem(1)
val navigationBarItemView: NavigationBarItemView = bottomNavigationView.findViewById(menuItem.itemId)
val iconView: View = navigationBarItemView.findViewById(com.google.android.material.R.id.navigation_bar_item_icon_view)
//set the new width and height for the iconView in pixels. You can change also the bottom margin of the icon View.
val iconViewParams: FrameLayout.LayoutParams = iconView.layoutParams as FrameLayout.LayoutParams
iconViewParams.width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 44F, resources.displayMetrics).toInt()
iconViewParams.height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 47F, resources.displayMetrics).toInt()
iconViewParams.bottomMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 35F, resources.displayMetrics).toInt()
iconView.layoutParams = iconViewParams
还可以在上面画一些东西BottomNavigationView
就像居中的图标一样,您必须将所有 ViewGroup 父级设置为BottomNavigationView
具有clipChildren = false
and clipToPadding = false
使用如下递归函数:
fun recursiveClipChildrenAndClipToPadding(parent: ViewGroup) {
if(parent is BottomNavigationView){
val bottomNavigationView = parent as BottomNavigationView
bottomNavigationView.clipChildren = false
bottomNavigationView.clipToPadding = false
}
for (i in 0 until parent.childCount) {
val child = parent.getChildAt(i)
if (child is ViewGroup) {
val vGroup = child as ViewGroup
vGroup.clipChildren = false
vGroup.clipToPadding = false
recursiveClipChildrenAndClipToPadding(vGroup)
}
}
}
你必须这样称呼它:
recursiveClipChildrenAndClipToPadding(bottomNavigationView)
我使用一些默认图标制作的示例结果如下: