为EditText设置setError和onClick方法相关的问题

5

setError() 方法显示的普通错误信息如下:

屏幕截图 #1

问题:

屏幕截图 #2

好的,我在同一对话框中有另一个 EditText,它具有用于显示 DatePicker 对话框的 OnClickListener。当我使用 setError() 时,它会显示红色警报图标,当我点击该图标时,事件仍由 EditText 上的 OnClickDatePicker 处理,因此我无法查看错误消息。

我的要求:如果我单击图标,它必须显示错误消息,如果我在图标外部单击,则应显示 DatePicker


使用自定义布局并处理相同的内容。 - Quick learner
4个回答

2

哦,天啊,我两天前也遇到了这个问题。我找不到同时让它有焦点(以便显示消息)和创建日期选择器弹出窗口的方法。最终我做的是像这样将EditText包装在一个TextInputLayout中:

<android.support.design.widget.TextInputLayout
            android:id="@+id/birthDateInputLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/input_birth_date"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/birth_date_hint"
                android:inputType="date" />
        </android.support.design.widget.TextInputLayout>

然后,我不是在编辑文本上设置错误,而是在TextInputLayout上设置错误,像这样:

birthDateInputLayout.setErrorEnabled(true);
birthDateInputLayout.setError("This field cannot be empty.");

注意:这种方法和常规的在EditText上设置错误的方式不完全相同,但它看起来足够好,并以不同的方式解决了问题。

以下是屏幕截图: enter image description here


谢谢!如果没有其他办法,我会考虑更改用户界面。目前,尽可能寻找不需要更改用户界面的解决方案。 - Xc0d3r
1
@Xc0d3r,我认为你应该采用这个解决方案,即使这意味着改变你的代码。这样你就会有一个干净的代码,而不是为了让其他解决方案工作而必须编写任何可能的黑客程序。另外,就个人观点而言,我真的很讨厌那种显示错误的模式,它看起来非常糟糕,与Material Design不协调。 - Iulian Popescu
我同意@IulianPopescu,我的邻居 :) 这确实更好地融入了Material的风格。但是如果OP仍然想追求他的原始想法,那也没关系。毕竟我的解决方案可能仍然会帮助到某些人。 - Vucko
@Xc0d3r 当没有错误时,这不会影响 UI 的外观,只有在出现错误时才会受到影响。您可以尝试并查看它是否符合您的需求。 - Vucko

0
一个简单的解决方案是在onclickListener内部检查错误是否为空。 即,

if(((EditText)view).getError() == null) {
//Handle your click for showing picker
}

0

试试这个,

onClick(View v){
    if(editText.getError() != null ){
       editText.requestFocus(); // to show error message
    }else{
        // open date picker dialog here or do you stuff here 
    }

希望能有所帮助


谢谢!这个方法确实有效,但只有在EditText可聚焦的情况下才行。不幸的是,在我的情况下,我不希望用户手动输入日期。我想到的一个解决方案是使用TextView而不是EditText - Xc0d3r
你也可以限制用户在编辑框中输入,只显示错误消息。 - Quick learner
在请求焦点后,请使用editText.setInputType(InputType.TYPE_NULL); - Quick learner

0

您可以根据您的代码使用以下代码,当所有字段都填写完毕并且第二个日期编辑文本设置为null时,将错误设置为null。如有任何疑问,请随时提问。

mEditText.setError(null);//removes error
mEditText.clearFocus();    //clear focus from edit text

这个怎么解决他的问题?他不仅仅想要去除错误。请仔细阅读问题。 - Vucko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接