我想要的是:
我正在构建一个如下所示的组件,其中+
和-
按钮的高度需要与TextInputLayout轮廓的高度匹配。
我尝试过的事情:
似乎没有公共api能让我了解轮廓的高度。但是,在TextInputLayout
中有private MaterialShapeDrawable boxBackground;
,但它是私有的。
如何使我的按钮与轮廓的高度匹配?
好问题!最好的选择是找到TextInput
的DP,然后使用match parent
方法将加法和减法按钮设置为与高度匹配。然后,您想将宽度设置为您的个人喜好,然后您的应用程序应该可以工作。如果有任何问题,请阅读this,有关TextInputs。如果仍然卡住,请切换到相对布局,然后将所有按钮的内容视图设置为常规按钮的dp。您随时可以估算。祝你好运!
我建议您从design docs开始查找默认大小。
以下内容不会获得轮廓的高度,但是无论如何都会使它对齐。
在您的组件中,可以将init或初始化组件的任何位置的GlobalLayoutListener添加到viewTreeObserver中,因此您可以获得正确的TextInputLayout大小,否则将始终为0。在OnGlobalLayout()方法中,您将必须进行一些计算。
例如
Init或您初始化的任何地方
init {
viewTreeObserver.addOnGlobalLayoutListener(object :
ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
textInputLayout.editText?.measuredHeight?.let {
val topMargin = 16.dpToPx()
val value = if (!textInputLayout.helperText.isNullOrEmpty()) {
(textInputLayout.measuredHeight - topMargin) - it
} else {
textInputLayout.measuredHeight - it
}
increaseButtonSize(it, value)
}
viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
}
增加按钮的大小
fun increaseButtonSize(size: Int, padding: Int) {
val lessButtonParams: LayoutParams = lessButton.layoutParams as LayoutParams
lessButtonParams.setMargins(lessButtonParams.leftMargin, padding, lessButtonParams.rightMargin, lessButtonParams.bottomMargin)
lessButtonParams.height = size
lessButton.layoutParams = lessButtonParams
val moreButtonParams: LayoutParams = moreButton.layoutParams as LayoutParams
params.setMargins(moreButtonParams.leftMargin, padding, moreButtonParams.rightMargin, moreButtonParams.bottomMargin)
params.height = size
moreButton.layoutParams = params
}