TextView实现N行展开收缩功能

使用AutoSize进行屏幕适配

XML文件正常写 不需要多余处理

private var descFold = true

fun setText(skuName: String) {
    val count = measureDescLineCount(skuName)
    binding.ivDescSwitch.visibility = View.INVISIBLE
    binding.ivDescSwitch.setOnClickListener(null)
    if (count > 2) {
        binding.ivDescSwitch.visibility = View.VISIBLE
        changeDescFoldStatus()
        binding.ivDescSwitch.setOnClickListener {
            descFold = !descFold
            changeDescFoldStatus()
        }
    }
}
// 切换展示
private fun changeDescFoldStatus() {
    if (descFold) {
        // 收起来的图片设置
        binding.ivDescSwitch.setImageResource(R.drawable.icon_arrow_down)
        binding.tvProductDesc.maxLines = 2
    } else {
        // 展开的图片设置
        binding.ivDescSwitch.setImageResource(R.drawable.icon_arrow_up)
        binding.tvProductDesc.maxLines = Int.MAX_VALUE
    }
/**
 * 计算文本在当前的textView所占用的函数
 * @params desc 文本内容
 */
private fun measureDescLineCount(desc: String): Int {
    val layoutEng = StaticLayout(
        desc,
        tempPaint,// 不确定使用 tv自带的paint可不可以 
        descWidth,
        Layout.Alignment.ALIGN_NORMAL,
        1.0f,
        0.0f,
        true
    )
    return layoutEng.lineCount
}
private val tempPaint = TextPaint().apply {
    textSize = AutoSizeUtils.dp2px(context, 12f).toFloat()
}
// 硬编码计算描述可用的最大宽度 屏幕宽度减去 其他占用宽度
private val descWidth =
    PlatformScreen.getScreenWidth() - AutoSizeUtils.dp2px(context,/*其他占用宽度 比如 间距 图片等等*/)

出现过的BUG问题

不实用AutoSize进行宽度计算 导致 某些屏幕出现计算不准确的问题,困扰许久 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值