InputTextLayout,将错误文本设置为帮助文本(不同颜色)

时间:2016-08-05 01:04:40

标签: android material-design android-textinputlayout

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颜色。但这没有帮助,因为它在应用程序运行时无法动态更改(例如,将状态从错误更改为帮助程序,反之亦然)。

4 个答案:

答案 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:errorTextAppearancetextLayout.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。