项目需求:
某折扣字符串:“满10减30·满20减30·满30减30·满40减40·满50减30·满60减30·满70减30·满80减30·满90减40·满100减30”
如果将上述文案使用maxline:1 和ellipsize:end 显示到一行中,显示如下:
在满60减30的时候因为放不下,被折叠起来了。
现产品要求如下:
也就是说:当在某单条折扣(如满60减30)已经放不下一行的时候,就要获取到上一个能放下的折扣(以点做区分)此案例中满60减30放不下,他的上一条折扣是满50减30,因此就展示到此即可。
方案:
- 获取到被折叠的位置
- 根据折叠位置,索引到上一条折扣
实现:
@SuppressLint("AppCompatCustomView")
class MeasureTextView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TextView(context, attrs, defStyleAttr) {
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
//1. 获取到折叠位置
val ellipsisStart = layout.getEllipsisStart(0)
if(ellipsisStart>0){
//2.获取到截取之前的文本
text = text?.substring(0,ellipsisStart)
//3.索引到上一条折扣文本
val lastIndexOf = text?.lastIndexOf("·")
if(lastIndexOf!=-1){
//4.获取到最终需要的文本
text = lastIndexOf?.let { text?.substring(0, it) }
}
}
}
}