Android setError与EditText的onClick一起

Android setError与EditText的onClick一起,android,android-edittext,Android,Android Edittext,使用setError()方法显示正常错误: 问题: 好的,我在同一个对话框中有另一个EditText,它有一个OnClickListener,用于显示DatePicker对话框。当IsetError()显示红色警报图标时,当我单击该图标时,事件仍由EditText上的OnClick处理,并弹出DatePicker,因此我无法查看错误消息 我想要的是:如果我单击图标,它必须显示错误消息,如果我在图标外单击,它应该显示日期选择器一个简单的解决方案是检查onclickListener内的错误是否为

使用
setError()
方法显示正常错误:

问题:

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


我想要的是:如果我单击图标,它必须显示错误消息,如果我在图标外单击,它应该显示
日期选择器

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


您可以根据您的代码使用以下代码 完成所有字段和第二个日期编辑文本后,将错误设置为null。您可以询问任何查询

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

天哪,我两天前就有这个问题了。我找不到方法使它既有焦点(以便显示消息,又创建日期选择器的弹出窗口。我最后做的是将
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>
birthDateInputLayout.setErrorEnabled(true);
birthDateInputLayout.setError("This field cannot be empty.");
注意:看起来与在
EditText
上设置错误的常规方法并不完全相同,但它确实看起来很不错,解决问题的方式也有点不同

下面是它的屏幕截图: 试试这个

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
。您可以限制用户在您的案例中键入EditText,也可以仅显示错误消息。请求焦点后,使用此EditText.setInputType(InputType.type\u NULL)谢谢!如果没有其他的工作,我会考虑改变UI。现在,寻找一个尽可能不改变UI的解决方案。@ XC0D3R,我认为你应该继续这个解决方案,即使它意味着改变你的代码。这样,你将有一个干净的代码,它工作得很好,与你可能要按顺序编写的任何可能的黑客相比。让另一个解决方案发挥作用。从个人角度来看,我真的很讨厌这种模式显示错误,它看起来很糟糕,与材质设计不协调。我同意@IulianPopescu,我的邻居:)这确实在某种程度上与材质融合得更好。但是如果OP仍然想追求他的原创想法,那也没关系。我的解决方案可能仍然对某些人有帮助。@Xc0d3r只有在没有错误时,这才不会影响UI的外观。你可以试试看它是否适合你的需要。
onClick(View v){
    if(editText.getError() != null ){
       editText.requestFocus(); // to show error message
    }else{
        // open date picker dialog here or do you stuff here 
    }