gpt4 book ai didi

android - 获取 TextInputLayout 中轮廓框的高度

转载 作者:行者123 更新时间:2023-12-02 15:17:43 24 4
gpt4 key购买 nike

我想要什么:

我正在构建一个如下所示的组件,其中 +- 按钮的高度需要与 TextInputLayout 轮廓的高度匹配。

enter image description here

我尝试过的:

似乎没有公共(public) API 可以让我获取轮廓的高度。但是,在 TextInputLayout 中有 private MaterialShapeDrawable boxBackground; 但它是私有(private)的。

如何使按钮与轮廓的高度匹配?

最佳答案

我建议你从 google material guidelines 开始找到默认大小应该是多少。

以下内容不会获得轮廓的高度,但无论如何它都会对齐它,因为我之前使用过类似的东西。

在您的组件中,您可以在 init 中或在初始化组件的任何位置将 GlobalLayoutListener 添加到 viewTreeObserver,这样您就可以获得 TextInputLayout 的正确大小,否则您将始终获得 0。在 OnGlobalLayout() 方法中,您必须进行一些计算。

  1. 您必须找出 TextInputLayout 中 EditText 的大小。
  2. 随着 EditText 的大小,您必须增加按钮的高度/宽度
  3. 通过使用文档,我假设错误/HelperText 在可见时始终会将小部件的大小增加 16。
  4. 因此,获取 textInputLayout 的测量大小并减去 EditText 的大小。这应该是您的按钮新顶部填充,但是因为当 Error/HelperText 可见时,它会改变小部件的大小并使布局错位,因此您可以检查 TextInputLayout helperText/error 是否为 null 或为空,并使用上面的假设当这些 View 可见时,可以减去 16dp,并且它将 View 向下推,与 EditText 正确对齐,而不是与提示对齐。

例如。

初始化或在任何地方初始化它

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

}

关于android - 获取 TextInputLayout 中轮廓框的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58964824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com