当前位置: 首页 > 知识库问答 >
问题:

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

阎慈
2023-03-14

这样,它就显示了提示和错误。而且它还有帮助器文本。这是它对密码设置很有用的地方。例如。在某人输入密码之前,ErrorText显示为HelperText,通过不同的颜色区分(根据示例,用灰色而不是红色)。

当我查看TextInputLayout时,它确实有两个函数

setError(CharSequence error) 

setHint(CharSequence hint) 

P/S:我知道如何通过样式设置来更改ErrorText颜色。但这没有帮助,因为它不能在应用程序运行时动态更改(例如,将状态从error更改为helper,反之亦然)。

共有1个答案

许出野
2023-03-14

鉴于设计指南中提到了这个方案,它不是a标准方法的一部分有点奇怪。不管怎样,我可以根据@Jared Rummler的回答改变颜色。他的建议是使用Java反射来处理肮脏的部分。首先,您需要获取对TextInputLayout的引用,并启用错误视图(否则反射将返回空字段):

    final TextInputLayout input = (TextInputLayout) findViewById(R.id.input);
    input.setErrorEnabled(true);

现在我们调用define一个错误颜色改变方法,如下所示:

    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的下划线和错误消息的颜色。但是,根据指导方针,它们是一样的,所以这符合我们的情况。这意味着要显示帮助器文本,我们只需将颜色更改为灰色,并调用seterror(),如下所示:

    setErrorTextColor(input, ContextCompat.getColor(getContext(), android.R.color.darker_gray));
    input.setError("Funk you!");
 类似资料:
  • 我需要一个javafx程序来设置文本的随机颜色和不透明度,我不知道该怎么做?下面是我的代码示例

  • 关于颜色配置文件 精确、一致的色彩管理要求所有的颜色设备具有准确的符合 ICC 规范的配置文件。例如,如果没有准确的扫描仪配置文件,一个正确扫描的图像可能在另一个程序中显示不正确,这只是由于扫描仪和显示图像的程序之间存在差别。这种产生误导的表现可能使您对已经令人满意的图像进行不必要的、费时的、可能是破坏性的“校正”。利用准确的配置文件,导入图像的程序能够校正任何设备差别并显示扫描的实际颜色。 色彩

  • fontColor(int $color): self int $color $config = [ 'path' => './tests' ]; ​ $fileObject = new \Vtiful\Kernel\Excel($config); ​ $fileObject = $fileObject->fileName('tutorial.xlsx'); $fileHandle =

  • 如何设置文本字段中文本的颜色?例如,将“你好和谐”字段中的“和谐”字体设置为红色。Android代码实现如下: SpannableStringBuilder ssb=新的SpannableStringBuilder();ssb。setSpan(新的ForegroundColorSpan(getCurrentHintTextColor()),i,i 1,0);

  • 我正在尝试设置组合框的文本颜色。 我尝试的代码