使用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进行宽度计算 导致 某些屏幕出现计算不准确的问题,困扰许久