使用有限的 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){

    }
});