Android提供了一个名为TextInputLayout的小部件 https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html
这可以提供提示和错误,这是EditText的绝佳包装。
https://material.google.com/patterns/errors.html#errors-user-input-errors
中似乎还有一个指南有了它,它显示提示和错误。它还有Helper Text。这是密码设置有用的地方。例如。在有人输入密码之前,ErrorText显示为HelperText,用不同的颜色区分(按照示例的灰色而不是红色)。
当我查看TextInputLayout时,它确实有两个函数
setError(CharSequence error)
和
setHint(CharSequence hint)
但是,没有办法将ErrorText更改为HelperText。我是否遗漏了任何内容,或者只是支持图书馆提供的TextInputLayout没有按照其在材料指南中推荐的功能向我们提供该功能?
p / s:我知道如何通过设置样式来更改ErrorText颜色。但这没有帮助,因为它在应用程序运行时无法动态更改(例如,将状态从错误更改为帮助程序,反之亦然)。
答案 0 :(得分:4)
鉴于设计指南中提到了这种方案,它有点奇怪,它不是标准方法的一部分。无论如何,我能够根据@Jared Rummler对here的回答来改变颜色。他的建议是使用Java Reflection来做脏位。首先,您需要获得对TextInputLayout
的引用并启用错误视图(否则反射将返回空字段):
final TextInputLayout input = (TextInputLayout) findViewById(R.id.input);
input.setErrorEnabled(true);
现在我们调用如下定义错误颜色更改方法:
public void setErrorTextColor(TextInputLayout textInputLayout, int color) {
try {
Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView");
fErrorView.setAccessible(true);
TextView mErrorView = (TextView) fErrorView.get(textInputLayout);
Field fCurTextColor = TextView.class.getDeclaredField("mCurTextColor");
fCurTextColor.setAccessible(true);
fCurTextColor.set(mErrorView, color);
} catch (Exception e) {
e.printStackTrace();
}
}
这实质上改变了TextInputLayout's
下划线和错误消息的颜色。但是,根据指南,它们无论如何都是相同的,所以这符合我们的情况。这意味着要显示我们的帮助文字,我们只需将颜色更改为灰色内容并在其上调用setError()
,如下所示:
setErrorTextColor(input, ContextCompat.getColor(getContext(), android.R.color.darker_gray));
input.setError("Funk you!");
应该这样做。当您希望显示错误时,请记住将颜色更改为红色。
答案 1 :(得分:2)
找到了TextInputLayout的扩展版本。 https://gist.github.com/drstranges/1a86965f582f610244d6
这样可以自然地添加帮助文本。
答案 2 :(得分:1)
您可以在布局上使用app:errorTextAppearance
或textLayout.setErrorTextAppearance()
更改错误文字的样式。
如果将其设置为与辅助文本匹配的样式,则它将看起来像辅助文本。然后使用“错误”方法来显示您的文字
textLayout.setErrorTextAppearance(R.style.TextAppearance_HelperText);
textLayout.setErrorEnabled(true)
textLayout.setError(getString(errorText));
答案 3 :(得分:0)
正在访问的人 借助Design Support Library 28,在TextInputLayout中添加了内置的帮助器Text功能。还可以使用内置方法来更改其颜色。
setHelperTextColor(ColorStateList textColors)
可以通过添加使用它
implementation 'com.android.support:design:28.0.0'
现在使用xml或以编程方式启用错误
textInputLayout.isHelperTextEnabled=true
textInputLayout.error="Email can not be Empty!!!"
而且,提示和错误现在可以一起使用!
示例
et.setOnFocusChangeListener { v, b ->
if (b) {
textInputLayout.helperText = "yourhelperText"
} else {
textInputLayout.helperText = null
if(et.text.toString()==""){ // or any other validation
textInputLayout.error="Email can not be Empty!!!"
}
}
TextInputLayout | Android Developers
编辑不要忘记通过xml或以编程方式启用错误和helperText。