Ami*_*bdi 4 xml user-interface android material-design textinputlayout
我最近发现了 Material Design TexInputLayout 的一个错误以及它使 endIcon 可见的方式。
假设您已正确设置所有内容并启用了结束图标,例如:
inputLayout.endIconMode == END_ICON_CLEAR_TEXT
Run Code Online (Sandbox Code Playgroud)
问题是,如果你定义一个 focusListener 像:
inputLayout.editText?.setOnFocusChangeListener { view, hasFocus -> ...}
Run Code Online (Sandbox Code Playgroud)
并导航到其中包含此 textInputLayout 的屏幕,其中包含一些已填充的文本,如下图所示
您会注意到 endIcon 没有显示,但如果您点击它应该在的位置,它就会起作用。
即使通过使其可见来确保它应该显示也inputLayout.isEndIconVisible =
无济于事。通过调试,您可以看到您点击了public void setEndIconVisible(boolean visible)
真实值,但仍然没有使图标可见。
我找到了一个解决方案,我已将其作为答案发布。
问题是ClearTextEndIconDelegate
有一个默认值OnFocusChangeListener
,当您单击 editText 时,它会运行一个动画,通过它,私有/内部的 alpha 值endIconView(which holds the endIconDrawable)
从 0 更改为 1。当您覆盖并设置自己的值时OnFocusChangeListener
,您实际上会放弃此过程并设置inputLayout.isEndIconVisible = true
启用视图,但您仍然看不到它。我没有找到任何方法来访问父视图并更改 Alpha。实际上你可以通过做类似的事情
(((inputLayout.getChildAt(0) as FrameLayout).getChildAt(2) as LinearLayout).getChildAt(1) as FrameLayout).getChildAt(0).alpha = 1f
Run Code Online (Sandbox Code Playgroud)
看看下面的图片,你就会明白我是如何结束上面的内容的:
但这不是一个很好的解决方案,如果视图的层次结构发生变化,它将不再起作用。
最终解决方案
OnFocusChangeListener
我带来的是在我的东西中调用原始内容,OnFocusChangeListener
例如:
val originalListener = inputLayout.editText?.onFocusChangeListener
inputLayout.editText?.setOnFocusChangeListener { view, hasFocus ->
originalListener?.onFocusChange(view, hasFocus)
// do your thing here
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3565 次 |
最近记录: |