BottomNavigationViewでハマったこと
・BottomNavigationViewの特定のアイコンサイズを変更したかった
まとめて全部のアイコンサイズを変更するのはXml等で比較的簡単にできたけど個別での変更がなかなか情報がなくて困った・・・
private fun fixAllIconSize() {
// ※1
val menuView = viewBinding.bottomNavigation.getChildAt(0) as BottomNavigationMenuView
// ※2
0.until(menuView.childCount).forEach { index ->
// ※3
val icon = menuView.getChildAt(index).findViewById<ImageView>(R.id.navigation_bar_item_icon_view)
val displayMetrics = resources.displayMetrics
// ※4
val layoutParams = (icon.layoutParams).apply {
when (index) {
// 例えば一番左のアイコンのサイズを変えたい
0 -> {
width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40f, displayMetrics).toInt()
height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40f, displayMetrics).toInt()
}
}
}
icon.layoutParams = layoutParams
}
}
上記でできた。
詰まったところは
val icon = menuView.getChildAt(index).findViewById<ImageView>(R.id.navigation_bar_item_icon_view)
の部分で指定するidがわからなくて超詰まった。
違うものを指定するとiconがnullになるのでクラッシュします。
やっていることは至極簡単でBottomNavigationViewを取得してその中から特定のアイコンをImageviewとして取得する。
その後にLayoutParamsでサイズを変更してセットしているだけ。
意外と情報がなくて困りますね・・・