我有一个带有受限制的InputType的EditText,如下所示:
latEdit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
这只接受float / double值。
因此,当用户尝试输入不允许的字符时,没有任何反应 我想在发生这种情况时向用户提供反馈。例如。 "只允许小数"敬酒。
我的猜测是使用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);
}
}
答案 0 :(得分:1)
尝试使用模式字符串并将其与文本侦听器中的字符串匹配。 如果文本与编译的模式不匹配,则显示一些错误消息。
我有类似你的问题 希望这也适合你。
答案 1 :(得分:1)
你不需要这样做:
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);
}
});
在更改文本时,您必须根据您的要求应用检查
答案 2 :(得分:1)
首先在edittext xml中添加android:inputType="number"
。这将导致仅打开数字键盘。然后
你需要添加addOnTextChangedListner然后在onTextChanged()中你将得到String数据。
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){
}
});