【问题标题】:Android manage warning messages in edittextAndroid在edittext中管理警告信息
【发布时间】:2017-08-01 15:12:19
【问题描述】:

请告诉我如何实现这一目标。 我有一个用于电子邮件的编辑文本,如果我没有输入任何内容,则不会显示警报或吐司。 提示将转换为红色。

如果我输入了错误的电子邮件然后输入的文本转换为红色。当我再次开始输入时,它将转换为黑色。

如果出错

  • (未输入任何内容)提示红色
  • (开始输入时)提示转换为黑色
  • (如果不是有效的电子邮件)输入的电子邮件转换为红色。
  • (开始重新输入时)电子邮件文本转换为红色。

谢谢

【问题讨论】:

标签: android validation android-edittext


【解决方案1】:

你需要创建一个自定义的edittext

public class EditTextLight extends EditText {
    public EditTextLight(Context context, AttributeSet attrs) {
        super(context, attrs);
        setTypeface(ApplicationFonts.getLightFont(context));
    }

    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        if (getTag() != null) {
            setTextColor(Color.parseColor(getTag().toString()));
        }
    }

     if (YOUR VALIDATION) 
{edittext.setHint(Validations.setErrorSpanText(edittext.getHint().toString()));
            }

 public static Spannable setErrorSpanText(String message) {
        Spannable textToSpan = new SpannableString(message);
        textToSpan.setSpan(new ForegroundColorSpan(Color.RED), 0, message.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return textToSpan;
    }

 if (edittext.getText().length() == 0)
                    edittext.setHint(Validations.setErrorSpanText(edittext.getHint().toString()));
                else {
                    edittext.setTextColor(Color.RED);
                }

【讨论】:

  • 是的,感谢您的帮助,它可以工作,但我仍然需要改进它,它有 1 个问题。非常感谢朋友
【解决方案2】:

您的EditText 将如下所示

<EditText
    android:id="@+id/email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:hint="Enter email here"
    android:inputType="textEmailAddress"
    android:textColorHint="@android:color/holo_red_dark" />

在你的活动中:-

final EditText email = (EditText) findViewById(R.id.email);
    email.addTextChangedListener(new TextWatcher()
    {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
        {
            if (isValidEmail(email.getText().toString().trim())) {
                email.setTextColor(Color.BLACK);
            } else
            {
                email.setTextColor(Color.RED);
            }

        }
        @Override
        public void afterTextChanged(Editable s)
        {

        }
    });

并添加此功能以检查电子邮件验证:-

 public final static boolean isValidEmail(CharSequence target) {
    if (target == null) {
        return false;
    } else {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
    }
}

如需更多自定义,您可以编辑 addTextChangedListener 并使用其功能

【讨论】:

    【解决方案3】:

    您应该为此使用文本输入布局。

    看看这个https://stackoverflow.com/a/45158144/5130133

    【讨论】:

    • 简短的回答不是回答,而是评论。
    猜你喜欢
    • 2018-09-27
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多