我想改变的大小,只有一个图标(第三个图标)的5个图标,我已经使用在我的底部导航视图。
我想要中心的图标很大,就像:
这就是我尝试过的:
private fun setReportPainIconSize(){
val bottomNavigationView =
findViewById<BottomNavigationView>(R.id.navigationBottomView)
val menuView: BottomNavigationMenuView =
bottomNavigationView.getChildAt(0) as BottomNavigationMenuView
val iconView: View = menuView.getChildAt(2) **//TO GET REFERENCE OF 3RD ITEM**
.findViewById(androidx.core.R.id.icon)
val layoutParams: ViewGroup.LayoutParams = iconView.layoutParams
val displayMetrics: DisplayMetrics = resources.displayMetrics
layoutParams.height = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 47F,
displayMetrics
).toInt()
layoutParams.width = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 44F,
displayMetrics
).toInt()
iconView.layoutParams = layoutParams
}
但是在运行我的应用程序时,我得到的错误信息是:
Caused by: java.lang.NullPointerException: menuView.getChildAt(2)
…(androidx.core.R.id.icon) must not be null
我该怎么做??救命啊!
发布于 2022-08-26 14:53:49
使用最新的材料设计库(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
上面画一些东西,比如居中图标,您必须让BottomNavigationView
中的所有ViewGroup父母使用如下的递归函数使clipChildren = false
和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)
我使用一些默认图标取得的示例结果如下所示:
https://stackoverflow.com/questions/73384717
复制相似问题