EditText中的错误弹出窗口没有显示?

时间:2017-12-13 09:28:48

标签: java android android-edittext

我有一个带有 DatepickerListener EditTextField 。如果我按下提交按钮,它应验证该字段,如果它们为空,则应显示错误消息。要显示此错误消息,我使用EditText.setError()方法,但弹出窗口不显示。我不知道如何解决它。

我在2台设备上进行了测试。一次使用Android 7.1.1上的OnePlus 5,一次使用Android 7.0.0上的三星Galaxy 7。两个设备上的行为相同。

先谢谢你。

这是我的代码(虚拟版):

private void initRequestButton(View view) {
    Button button = view.findViewById(R.id.submitButton);
    EditText dateTextField = view.findViewById(R.id.someField);        

    button.setOnClickListener(v -> {
        String dateText = dateTextField.getText().toString();
        if (dateText.isEmpty()) {
                dateTextField.setError("A date is required");
        } else {
            //do Something
        }
    });
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:errorEnabled="true">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dip"
    android:layout_marginTop="10dip"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/someField"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"
        android:layout_marginTop="20dip"
        android:layout_weight="0.5"
        android:clickable="false"
        android:cursorVisible="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:inputType="none" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dip"
    android:layout_marginTop="5dip"
    android:orientation="horizontal">

    <Button
        android:id="@+id/submitButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="0.3"
        android:text="@string/someText" />
</LinearLayout>

2 个答案:

答案 0 :(得分:0)

只需删除

即可
 android:focusable="false"
    android:focusableInTouchMode="false"
来自edittext的

属性。

答案 1 :(得分:0)

您用来设置错误的代码是正常的,但弹出窗口仅在通过手动触摸或通过编程方式聚焦编辑文本时弹出,只需添加,

yourEdtext.requestFocus()

将错误设置为字段后。这将在验证失败后显示弹出窗口