我正在创建一个自定义按钮MyButton
扩展MaterialButton
。用例是,有2个大小的按钮 * 大 * 和 * 小 *,大按钮将是全宽(类似于match_parent
)和小按钮将有一些minWidth
让我们说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 (/* need to check if the declared layout_width is match_parent*/){
// set some padding and text style
} else {
// set some different padding and texy style
}
}
}
字符串
1条答案
按热度按时间vzgqcmou1#
我通常使用
addOnGlobalLayoutListener
在视图完全渲染后做一些事情:像这样定义一个扩展:
字符串
在
MyButton
init方法中,型
如果您只想检查
layout_width
或layout_height
,而不知道其确切大小,只需检查LayoutParams
即可。型