【问题标题】:wrap_content breaks performance of my constraint layoutwrap_content 破坏了我的约束布局的性能
【发布时间】:2021-01-22 22:02:33
【问题描述】:

我有一个TextView,我每秒都会更新它作为计数器。如果我使用wrap_content 作为其宽度,我会收到性能警告,即在布局/测量阶段绘制视图更新需要 50 毫秒。当我以编程方式设置其宽度和高度时,它会处理警报,但我的视图不再调整大小(显然:)。我在这里想念什么?有没有办法将视图失效/调整大小最小化为仅在文本更改为更大宽度时?每次更新视图时是否必须以编程方式执行此操作并计算新大小?

【问题讨论】:

  • 我不确定,但设置 min_height = "spesific dp" 和 height = "wrap_content" 可能会解决您的问题。
  • 我认为您必须将 TextView 尺寸设置为静态值,以防止在更改事件中触发调整大小

标签: android android-constraintlayout


【解决方案1】:

这并不是解决它首先发生的原因,而是一种锻炼(感觉非常反机器人,因为它不依赖 ConstraintLayout 来解决希望是一个简单的方程组来确定适当的固有 TextView 宽度,而不会破坏整个 UI 线程):

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()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多