Android在edittext中管理警告消息

时间:2017-08-01 05:13:54

标签: android validation android-edittext

请让我知道我是如何实现这一目标的。 我有一个电子邮件的edittext,如果我没有输入任何内容,而不是显示警报或吐司。 提示将转换为红色。

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

如果错误

  • (没有输入)暗示红色
  • (开始输入时)提示转换为黑色
  • (如果无效的电子邮件)电子邮件已转换为红色。
  • (开始重新输入时)电子邮件文本转换为红色。

由于

3 个答案:

答案 0 :(得分:0)

您需要创建自定义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 :(得分:0)

您的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并使用其功能

答案 2 :(得分:-1)

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

查看https://stackoverflow.com/a/45158144/5130133