wrap_content 破坏了我的约束布局的性能
wrap_content breaks performance of my constraint layout
我有一个 TextView
,我每秒更新一次作为计数器。如果我使用 wrap_content
作为宽度,我会收到性能警告,指出在 layout/measure 阶段绘制视图更新需要 50 毫秒。当我以编程方式设置其宽度和高度时,它会处理警报,但我的视图不再调整大小(显然 :)。我在这里错过了什么?有没有办法最小化视图失效/仅当文本更改为更大宽度时才调整大小?我是否必须以编程方式执行此操作并在每次更新视图时计算新大小?
这并不是解决它最初发生原因的真正解决方案,而是一种解决方案(感觉非常反android,因为它不依赖 ConstraintLayout 来解决希望是在不破坏整个 UI 线程的情况下确定适当的固有 TextView 宽度的简单方程组:
fun TextView.conditionallyChangeWidthWithNewString(newString: CharSequence) {
val calculatedWidth = getWidthOfNewText(newString.toString())
if (calculatedWidth > layoutParams.width) {
val params = getLayoutParams()
params.width = calculatedWidth
setLayoutParams(params)
}
setTextIfChanged(newString)
}
fun TextView.getWidthOfNewText(s: String): Int {
val p = Paint()
val bounds = Rect()
val plain = typeface
p.setTypeface(plain)
p.textSize = textSize
p.getTextBounds(s, 0, s.length, bounds)
val mt = p.measureText(s)
return mt.toInt()
}
我有一个 TextView
,我每秒更新一次作为计数器。如果我使用 wrap_content
作为宽度,我会收到性能警告,指出在 layout/measure 阶段绘制视图更新需要 50 毫秒。当我以编程方式设置其宽度和高度时,它会处理警报,但我的视图不再调整大小(显然 :)。我在这里错过了什么?有没有办法最小化视图失效/仅当文本更改为更大宽度时才调整大小?我是否必须以编程方式执行此操作并在每次更新视图时计算新大小?
这并不是解决它最初发生原因的真正解决方案,而是一种解决方案(感觉非常反android,因为它不依赖 ConstraintLayout 来解决希望是在不破坏整个 UI 线程的情况下确定适当的固有 TextView 宽度的简单方程组:
fun TextView.conditionallyChangeWidthWithNewString(newString: CharSequence) {
val calculatedWidth = getWidthOfNewText(newString.toString())
if (calculatedWidth > layoutParams.width) {
val params = getLayoutParams()
params.width = calculatedWidth
setLayoutParams(params)
}
setTextIfChanged(newString)
}
fun TextView.getWidthOfNewText(s: String): Int {
val p = Paint()
val bounds = Rect()
val plain = typeface
p.setTypeface(plain)
p.textSize = textSize
p.getTextBounds(s, 0, s.length, bounds)
val mt = p.measureText(s)
return mt.toInt()
}