动态设置BottomNavigationView下面tab图标的大小

目标:动态设置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(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(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)。根据你的业务来。

可以参考我的


微信截图_20220901103049.png
微信截图_20220901103024.png

喜欢的话可以点个赞~

你可能感兴趣的:(动态设置BottomNavigationView下面tab图标的大小)