我有一个带有 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>
答案 0 :(得分:0)
只需删除
即可 android:focusable="false"
android:focusableInTouchMode="false"
来自edittext的属性。
答案 1 :(得分:0)
您用来设置错误的代码是正常的,但弹出窗口仅在通过手动触摸或通过编程方式聚焦编辑文本时弹出,只需添加,
yourEdtext.requestFocus()
将错误设置为字段后。这将在验证失败后显示弹出窗口