目标:动态设置tab的大小
1.废话不多说了,直接上代码
2个工具类
object BottomNavigationViewHelper {
/**
* 设置所有图片尺寸
*
* @param view BottomNavigationView
* @param width 宽
* @param height 高
*/
fun setAllImageSize(view: BottomNavigationView, width: Int, height: Int) {
val menuView = view.getChildAt(0) as BottomNavigationMenuView
try {
for (i in 0 until menuView.childCount) {
val item =
menuView.getChildAt(i) as BottomNavigationItemView
val imageView =
item.findViewById<ImageView>(R.id.icon)
imageView.layoutParams.width = width
imageView.layoutParams.height = height
}
} catch (e: Exception) {
e.printStackTrace()
}
}
/**
* 设置单个条目图片尺寸
*
* @param position 条目位置
* @param view BottomNavigationView
* @param width 宽
* @param height 高
*/
fun setOneImageSize(
position: Int,
view: BottomNavigationView,
width: Int,
height: Int
) {
val menuView = view.getChildAt(0) as BottomNavigationMenuView
try {
for (i in 0 until menuView.childCount) {
if (i == position) {
val item =
menuView.getChildAt(i) as BottomNavigationItemView
val imageView =
item.findViewById<ImageView>(R.id.icon)
imageView.layoutParams.width = width
imageView.layoutParams.height = height
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
object ScreenUtils {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
fun dip2px(context: Context, dpValue: Float): Int {
val scale = context.resources.displayMetrics.density
return (dpValue * scale + 0.5f).toInt()
}
}
2.下面是使用
在MainActivity中:
companion object {
//选中时tab图片尺寸大小
const val selectedSize = 29.0f
//未选中时tab图片尺寸大小
const val unSelectedSize = 23.0f
}
设置一个图标的大小
BottomNavigationViewHelper.setOneImageSize(
0,
binding.navigation,
ScreenUtils.dip2px(this, selectedSize),
ScreenUtils.dip2px(this, selectedSize)
)
设置所有图标的大小
BottomNavigationViewHelper.setAllImageSize(
binding.navigation,
ScreenUtils.dip2px(this, unSelectedSize),
ScreenUtils.dip2px(this, unSelectedSize)
)
关于设置图标大小的时机,要看你的业务需求了,一般来说是activity创建的时候(setAllImageSize);
或者BottomNavigationView点击事件 之后 (setOneImageSize)。根据你的业务来。
可以参考我的
喜欢的话可以点个赞~