这是可行的
myView.layoutParams = myView.layoutParams.apply { height = 100 }但这都不是(使用android-ktx)
myView.doOnLayout {
myView.layoutParams = myView.layoutParams.apply { height = 100 }
}也不是这个
myView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
myView.layoutParams = myView.layoutParams.apply { height = 100 }
myView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})甚至连这个也没有
postDelayed({
myView.layoutParams = myView.layoutParams.apply { height = 100 }
}, 100)很管用。为什么?
发布于 2018-02-26 22:25:40
更改LayoutParams的高度或宽度不会影响其视图。LayoutParams是简单的值容器。要应用更改,必须调用requestLayout
myView.doOnLayout {
myView.layoutParams.height = 100
myView.requestLayout()
}另一种方法是重新分配layoutParams
myView.doOnLayout {
myView.layoutParams = myView.layoutParams.apply {
height = 100
}
}您的第一个示例之所以有效,可能是因为赋值甚至在绘制视图之前就执行了。
https://stackoverflow.com/questions/48990630
复制相似问题