【CustomView】封装Spinner(可设置高度)- LimitPopupHeightSpinner

### Spinner如果不限制高度,会出现这样的充满全屏的高度,这也是UI设计师不允许的

如下图所示:

这里需要判断列表数据的数量是否超出限制:

// set a limit sliding height
(limitPopupHeightSpinner).setSpinnerItem(data.size)

 

### 完整的代码:

@SuppressLint("AppCompatCustomView")
class LimitPopupHeightSpinner : Spinner {
    constructor(context: Context, attrs: AttributeSet? = null) : super(context, attrs)

    companion object {
        private const val LIMIT_VISIBLE_SCROLL: Int = 4
    }

    private var spinnerItem: Int = 0

    fun setSpinnerItem(spinnerItem: Int) {
        this.spinnerItem = spinnerItem
    }

    override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
        super.onLayout(changed, l, t, r, b)
        if (spinnerItem > LIMIT_VISIBLE_SCROLL) limitListPopupHeight()
    }

    private fun limitListPopupHeight() {
        try {
            val spinnerClass = android.widget.Spinner::class.java

            val listPopup = spinnerClass
                .getDeclaredField("mPopup")
                .apply { isAccessible = true }
                .get(this)

            // Set popupWindow height
            (listPopup as? ListPopupWindow)?.height = resources.getDimension(R.dimen.dp_314).toInt()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值