在膨胀之前获取在 xml 中声明的按钮尺寸

问题描述 投票:0回答:1

我正在创建一个自定义按钮

MyButton
扩展
MaterialButton
。用例是按钮有两种尺寸:largesmall,大按钮将是全宽(类似于
match_parent
),小按钮将有一些
minWidth
,比如说100dp,最重要的是它们将具有不同的填充不同的文本大小。 在为
MyButton
编写自定义类时,如何检查 xml 中提到的
layout_height
layout_width
是什么,以便我可以采取适当的操作来设置正确的 UI?

我尝试获取视图高度和宽度,但它们将以 0 的形式出现,因为那时它们尚未完全放置。 我也尝试过使用

doOnLayout{ }
但这也没有在
MyButton
类中被调用。 我还尝试了
button_size
的自定义属性,并基于该属性设置布局参数,但也不起作用。

所以我希望如果我能以某种方式得到xml中声明的东西(主要是

layout_width
)我可以相应地更新其他属性。

android kotlin android-layout material-design
1个回答
0
投票

我通常使用

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
}
© www.soinside.com 2019 - 2024. All rights reserved.