这有效
myView.layoutParams = myView.layoutParams.apply { height = 100 }
Run Code Online (Sandbox Code Playgroud)
但这都不是(使用android-ktx)
myView.doOnLayout {
myView.layoutParams = myView.layoutParams.apply { height = 100 }
}
Run Code Online (Sandbox Code Playgroud)
也不是这个
myView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
myView.layoutParams = myView.layoutParams.apply { height = 100 }
myView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
Run Code Online (Sandbox Code Playgroud)
甚至这个
postDelayed({
myView.layoutParams = myView.layoutParams.apply { height = 100 }
}, 100)
Run Code Online (Sandbox Code Playgroud)
作品。为什么?
更改 的高度或宽度LayoutParams不会影响其视图。LayoutParams是简单的价值持有者。要应用更改,您必须调用requestLayout:
myView.doOnLayout {
myView.layoutParams.height = 100
myView.requestLayout()
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是重新分配layoutParams:
myView.doOnLayout {
myView.layoutParams = myView.layoutParams.apply {
height = 100
}
}
Run Code Online (Sandbox Code Playgroud)
你的第一个例子可能是因为分配是在绘制视图之前执行的。
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |