我正在创建一个自定义按钮
MyButton
扩展 MaterialButton
。用例是按钮有两种尺寸:large和small,大按钮将是全宽(类似于match_parent
),小按钮将有一些minWidth
,比如说100dp,最重要的是它们将具有不同的填充和不同的文本大小。
在为 MyButton
编写自定义类时,如何检查 xml 中提到的 layout_height
和 layout_width
是什么,以便我可以采取适当的操作来设置正确的 UI?
我尝试获取视图高度和宽度,但它们将以 0 的形式出现,因为那时它们尚未完全放置。 我也尝试过使用
doOnLayout{ }
但这也没有在 MyButton
类中被调用。
我还尝试了 button_size
的自定义属性,并基于该属性设置布局参数,但也不起作用。
所以我希望如果我能以某种方式得到xml中声明的东西(主要是
layout_width
)我可以相应地更新其他属性。
我通常使用
addOnGlobalLayoutListener
来监听渲染布局上的操作:
使用这样的扩展:
fun View.runOnRendered(onRendered: () -> Unit) {
viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
viewTreeObserver.removeOnGlobalLayoutListener(this)
onRendered()
}
})
}
用途:
myview.runOnRendered {
// Check for myview width and height
}