Android TextInputLayout图标出错(或提示)文本

我正在使用TextInputLayoutHelper小部件,以遵循浮动标签输入的材料指南。 它目前看起来像这样:

浮动输入标签与错误消息

我的代码

在我的onCreatefunction上,我有:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val passwordInputLayout = this.findViewById(R.id.input_layout_password) passwordInputLayout.error = "8+ characters and at least one uppercase letter, a number, and a special character (\$, #, !)" passwordInputLayout.isErrorEnabled = true } 

和我的部件在我的xml看起来像…

    

我想做的事

我想在错误文本右侧的错误/提示文本(惊叹号三角形)中放置一个图标。

嘲笑与错误图标的输入

我的尝试

尝试1

我发现一个使用setError(text, drawable) 的实现 ,但我使用Kotlin setError不可用。

所以我试了一下:

 val warningIcon = ResourcesCompat.getDrawable(resources, R.drawable.ic_warning_black_24dp, null) warningIcon?.setBounds(0, 0, warningIcon.intrinsicWidth, warningIcon.intrinsicHeight) passwordInputLayout.error = "8+ characters and at least one uppercase letter, a number, and a special character (\$, #, !) $warningIcon" 

但是这并不呈现可绘制的,只有一个资源路径的字符串。

尝试2

我发现另一个覆盖TextInputLayoutHelper为了在文本旁边设置drawable。 正如你所看到的, setError只包含没有drawable参数的接口override fun setError(error: CharSequence?)

 override fun setError(error: CharSequence?) { super.setError(error) val warningIcon = ResourcesCompat.getDrawable(resources, R.drawable.ic_warning_black_24dp, null) warningIcon?.setBounds(0, 0, warningIcon.intrinsicWidth, warningIcon.intrinsicHeight) // mHelperView is a TextView used in my custom `TextInputLayout` override widget mHelperView!!.setCompoundDrawables(null, null, warningIcon, null) } 

是否有重写或内置“Android方式”添加此图标旁边的错误/提示文本?

迟到的回应可能会帮助其他人陷入类似的困境。 我查看了源代码。 事情是setError(text, drawable)定义在EditText类而不是TextInputLayout作为您的布局是基于。 我有类似的代码和像你这样的问题,因为TextInputLayout没有任何方法来取代Draweble,那么我们必须在TextInputLayout下创建一个TextView来模拟错误信息。