使用有限的 InputType 向用户提供有关 EditTexts 的反馈
Give user feedback on EditTexts with limited InputType
我有一个带有受限输入类型的 EditText,如下所示:
latEdit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
这只接受 float/double 值。
因此,当用户尝试键入不允许的字符时,什么也不会发生。
发生这种情况时,我想给用户反馈。例如。 "only decimals allowed"敬酒。
我的猜测是使用 onTextChanged
并尝试验证那里的输入,但我不确定该方法是否会在输入受限的情况下被调用。
编辑
我使用了 M.Saad Lakhan 的答案的想法,删除了 setInputType
标志并用这个正则表达式和 setError
方法解决了它:
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().matches("[0-9]{1,13}(\.[0-9]*)?"))
{
latEdit.setError(wrongInputWarning);
}
}
尝试使用模式字符串并将其与来自文本侦听器的字符串相匹配。
如果文本与编译模式不匹配,则显示一些错误消息。
我遇到了和你一样的问题
希望这对你也有用。
你不需要这样做:
latEdit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
您需要在您的编辑文本上添加 TextChangeListener,如下所示:
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.matches("(?<=^| )\d+(\.\d+)?(?=$| )"))
{
Toast.makeText(getApplicationContext(), "Only digits and . are allowed", Toast.LENGTH_LONG).show();
etNewPassword.requestFocus();
return;
}
}
@Override
public void afterTextChanged(Editable s) {
textv.setText(s);
}
});
在文本更改中,您必须根据您的要求应用检查
首先在您的编辑文本 xml 中添加 android:inputType="number"
。这将导致只打开数字键盘。然后
您需要添加 addOnTextChangedListner 然后在 onTextChanged() 中您将获得字符串数据。
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged (CharSequence s,int start, int count, int after){
}
@Override
public void onTextChanged (CharSequence s,int start, int before, int count){
String text = s.toString();
try {
int num = Integer.parseInt(text);
Log.i("", num + " is a number");
} catch (NumberFormatException e) {
Log.i("", text + " is not a number");
}
}
@Override
public void afterTextChanged (Editable s){
}
});
我有一个带有受限输入类型的 EditText,如下所示:
latEdit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
这只接受 float/double 值。
因此,当用户尝试键入不允许的字符时,什么也不会发生。
发生这种情况时,我想给用户反馈。例如。 "only decimals allowed"敬酒。
我的猜测是使用 onTextChanged
并尝试验证那里的输入,但我不确定该方法是否会在输入受限的情况下被调用。
编辑
我使用了 M.Saad Lakhan 的答案的想法,删除了 setInputType
标志并用这个正则表达式和 setError
方法解决了它:
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().matches("[0-9]{1,13}(\.[0-9]*)?"))
{
latEdit.setError(wrongInputWarning);
}
}
尝试使用模式字符串并将其与来自文本侦听器的字符串相匹配。 如果文本与编译模式不匹配,则显示一些错误消息。
我遇到了和你一样的问题 希望这对你也有用。
你不需要这样做:
latEdit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
您需要在您的编辑文本上添加 TextChangeListener,如下所示:
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.matches("(?<=^| )\d+(\.\d+)?(?=$| )"))
{
Toast.makeText(getApplicationContext(), "Only digits and . are allowed", Toast.LENGTH_LONG).show();
etNewPassword.requestFocus();
return;
}
}
@Override
public void afterTextChanged(Editable s) {
textv.setText(s);
}
});
在文本更改中,您必须根据您的要求应用检查
首先在您的编辑文本 xml 中添加 android:inputType="number"
。这将导致只打开数字键盘。然后
您需要添加 addOnTextChangedListner 然后在 onTextChanged() 中您将获得字符串数据。
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged (CharSequence s,int start, int count, int after){
}
@Override
public void onTextChanged (CharSequence s,int start, int before, int count){
String text = s.toString();
try {
int num = Integer.parseInt(text);
Log.i("", num + " is a number");
} catch (NumberFormatException e) {
Log.i("", text + " is not a number");
}
}
@Override
public void afterTextChanged (Editable s){
}
});