在 InputTextLayout 中将错误设置为 EditText 时,只有错误图标可见
Only Error icon is visible while setting error to EditText in InputTextLayout
当用户在注册时输入无效的 email
或 mobile
时,我将错误设置为 EditText
。
请检查以下代码:
<android.support.design.widget.TextInputLayout
android:id="@+id/txt_input_mobile_number"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/input_mobile_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Mobile number"
android:maxLength="10"
android:inputType="number"
android:maxLines="1"/>
</android.support.design.widget.TextInputLayout>
MyFragment.java
下面实现OnKeyListener
:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// perform validation of data here
switch (v.getId()) {
case R.id.input_mobile_number:
EditText editMobile = (EditText)getActivity().findViewById(R.id.input_mobile_number);
Editable phone = binding.inputMobileNumber.getText();
if (phone != null && isValidMobile(phone.toString())) {
editMobile.setError("Please enter valid mobile number");
editMobile.requestFocus();
}
break;
}
return true;
}
return false;
}
下面的屏幕截图显示,只有错误图标可见,而不是其他错误框:
只有符号
有错误提示
想通了!!
当我们使用 TextInputLayout
时,我们需要 将错误设置为 EditText
而不是 TextInputLayout
本身 .
所以我更改了我的代码如下:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// perform validation of data here
switch (v.getId()) {
case R.id.input_mobile_number:
// check it is TextInputLayout not EditText
TextInputLayout editMobile = (EditText)getActivity().findViewById(R.id.txt_input_mobile_number);
Editable phone = binding.inputMobileNumber.getText();
if (phone != null && isValidMobile(phone.toString())) {
editMobile.setError("Please enter valid mobile number");
editMobile.requestFocus();
}
break;
}
return true;
}
return false;
}
您应该使用 TextInputLayout
而不是 EditText
来满足您的 要求。
TextInputLayout tilObj = (TextInputLayout) findViewById(R.id.txt_input_mobile_number);
tilObj .setErrorEnabled(true);
tilObj .setError("Please enter valid mobile number");
可能这两个 TextInputLayout 之间的 space 很低,您看不到错误消息,请尝试在它们之间放置更多的边距。
当用户在注册时输入无效的 email
或 mobile
时,我将错误设置为 EditText
。
请检查以下代码:
<android.support.design.widget.TextInputLayout
android:id="@+id/txt_input_mobile_number"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/input_mobile_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Mobile number"
android:maxLength="10"
android:inputType="number"
android:maxLines="1"/>
</android.support.design.widget.TextInputLayout>
MyFragment.java
下面实现OnKeyListener
:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// perform validation of data here
switch (v.getId()) {
case R.id.input_mobile_number:
EditText editMobile = (EditText)getActivity().findViewById(R.id.input_mobile_number);
Editable phone = binding.inputMobileNumber.getText();
if (phone != null && isValidMobile(phone.toString())) {
editMobile.setError("Please enter valid mobile number");
editMobile.requestFocus();
}
break;
}
return true;
}
return false;
}
下面的屏幕截图显示,只有错误图标可见,而不是其他错误框:
只有符号
有错误提示
想通了!!
当我们使用 TextInputLayout
时,我们需要 将错误设置为 EditText
而不是 TextInputLayout
本身 .
所以我更改了我的代码如下:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// perform validation of data here
switch (v.getId()) {
case R.id.input_mobile_number:
// check it is TextInputLayout not EditText
TextInputLayout editMobile = (EditText)getActivity().findViewById(R.id.txt_input_mobile_number);
Editable phone = binding.inputMobileNumber.getText();
if (phone != null && isValidMobile(phone.toString())) {
editMobile.setError("Please enter valid mobile number");
editMobile.requestFocus();
}
break;
}
return true;
}
return false;
}
您应该使用 TextInputLayout
而不是 EditText
来满足您的 要求。
TextInputLayout tilObj = (TextInputLayout) findViewById(R.id.txt_input_mobile_number);
tilObj .setErrorEnabled(true);
tilObj .setError("Please enter valid mobile number");
可能这两个 TextInputLayout 之间的 space 很低,您看不到错误消息,请尝试在它们之间放置更多的边距。