背景
一括でアイコンサイズを整える場合は、XML上にてBottomNavigationに対して
app:itemIconSize="XXdp"
を指定すれば問題ないが、アイコンごとにサイズがばらばらだったりして個々にサイズを指定したい場合にどうするか
環境
implementation 'com.google.android.material:material:1.2.0-alpha03'
実装
private fun fixAllIconSize() {
// ※1
val menuView = navView.getChildAt(0) as BottomNavigationMenuView
// ※2
0.until(menuView.childCount).forEach { index ->
// ※3
val icon = menuView.getChildAt(index).findViewById<ImageView>(com.google.android.material.R.id.icon)
val displayMetrics = resources.displayMetrics
// ※4
val layoutParams = (icon.layoutParams).apply {
when (index) {
// 例えば一番左のアイコンのサイズを変えたい
0 -> {
width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 28f, displayMetrics).toInt()
height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 18f, displayMetrics).toInt()
}
else -> {
width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24f, displayMetrics).toInt()
height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24f, displayMetrics).toInt()
}
}
}
icon.layoutParams = layoutParams
}
}
説明
- ※1:
navView
はBottomNavigationView
のこと - ※2:
menuView.childCount
でボトムナビに設定しているアイコンの数(=メニューアイテムの数)がとれる - ※3: 個々のアイコンのindexが左から順に0,1,2...となっているため、それぞれのImageViewを取得してあげる
- ※4: ImageViewのLayoutParamsを取得し、width, heightを調整する
以上です