我想要的是:
我正在构建一个如下所示的组件,其中+
和-
按钮的高度需要与TextInputLayout轮廓的高度匹配。
我尝试过的事情:
似乎没有公共api能让我了解轮廓的高度。
但是,在TextInputLayout
中有private MaterialShapeDrawable boxBackground;
,但它是私有的。
如何使按钮与轮廓的高度匹配?
答案 0 :(得分:2)
我建议您从google material guidelines开始,以查找默认大小。
以下内容不会获得轮廓的高度,但是无论如何,只要我前一阵子使用类似的东西,它将使它对齐。
在您的组件中,可以将init或初始化组件的任何位置的GlobalLayoutListener添加到viewTreeObserver中,以便可以获取正确的TextInputLayout大小,否则将始终为0。 在OnGlobalLayout()方法内部,您将必须进行一些计算。
例如
初始化或您初始化的任何地方
init {
viewTreeObserver.addOnGlobalLayoutListener(object :
ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
textInputLayout.editText?.measuredHeight?.let {
val topMargin = 16.dpToPx() //Mentioned in the step #3
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
}
答案 1 :(得分:0)
好问题!最好的选择是找到TextInput
的DP,然后使用match parent
方法将加法和减法按钮设置为与高度匹配。然后,您想将宽度设置为您的个人喜好,然后您的应用程序应该可以工作。如果您有任何问题,请阅读this,了解有关TextInputs的信息。如果仍然卡住,请切换到相对布局,然后将所有按钮的内容视图设置为常规按钮的dp。您随时可以估算。祝你好运!