使用有限的InputType为EditTexts提供用户反馈

时间:2017-10-31 11:01:20

标签: android android-edittext feedback

我有一个带有受限制的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);
        }
    }

3 个答案:

答案 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){

    }
});