我正在创建一个自定义按钮类 MyButton
,它继承自 MaterialButton
。使用场景是存在两种尺寸的按钮:大尺寸(类似于 match_parent
的宽度)和小尺寸,大尺寸按钮的宽度为满宽,小尺寸按钮具有最小宽度,比如100dp,并且它们需要有不同的内边距和文本大小。在编写 MyButton
自定义类时,如何检查 XML 中声明的 layout_height
和 layout_width
,以便我可以采取相应措施设置正确的UI样式?
我已经尝试获取视图的高度和宽度,但由于此时它们尚未完全布局,所以返回值为0。我还尝试了使用 doOnLayout{ }
,但在 MyButton
类中并未调用此方法。此外,我还尝试使用自定义属性 button_size
,并基于该属性设置布局参数,但同样无法正常工作。
因此,我期望能够以某种方式获取XML中声明的内容(主要是 layout_width
),以便我能据此更新其他属性。
例如:
open class MyButton @JvmOverloads constructor(
context: Context,
private val attributeSet: AttributeSet? = null,
private val styleAttribute: Int = com.google.android.material.R.attr.materialButtonStyle
) : MaterialButton(context, attributeSet, styleAttribute) {
init {
attributeSet?.let { parseAttr(it) }
}
private fun parseAttr(attr: AttributeSet) {
if (/* 需要在此处检查声明的 layout_width 是否为 match_parent */) {
// 设置特定的内边距和文本样式
} else {
// 设置不同的内边距和文本样式
}
}
}