Android:EditText 输入验证

标签 android validation input android-edittext

我正在构建一个应用程序,其中有一个 EditText需要插入一个字节值。 EditText应该只能接受值 -128 到 127,它们是 Byte.MIN_VALUEByte.MAX_VALUE .

我创建了一个 class称为 EditTextFilter实现TextWatcher .我用 afterTextChanged事件监听器来检查值。我在一个单独的 class 中处理这个因为我将它用于多个 EditText对象。请看下面的代码:

@Override
public void afterTextChanged(Editable s)
{
    double value = 0;

    try
    {
        value = Double.parseDouble(s.toString());
    }
    catch (NumberFormatException e)
    {
        Log.e(EditTextFilter.class.toString(), e.getMessage());
    }

    switch (this.type)
    {
        case TYPE_BYTE:
            Log.v(EditTextFilter.class.toString(), "-----> EditTextFilter Byte");
            if (value > Byte.MAX_VALUE)
            {
                Log.v(EditTextFilter.class.toString(), "-----> Value out of range. Greater than Byte.MAX_VALUE");
                Toast.makeText(context, "Value out of range. Greater than Byte.MAX_VALUE", Toast.LENGTH_SHORT).show();
            }
            else if (value <= Byte.MIN_VALUE)
            {
                Log.v(EditTextFilter.class.toString(), "-----> Value out of range. Less than Byte.MIN_VALUE");
                Toast.makeText(context, "Value out of range. Less than Byte.MIN_VALUE", Toast.LENGTH_SHORT).show();
            }
        break;
        case TYPE_CHAR:
            Log.v(EditTextFilter.class.toString(), "-----> EditTextFilter Char");
            if (s.toString().length() > 1)
            {
                Log.v(EditTextFilter.class.toString(), "-----> Please enter single character");
                Toast.makeText(context, "Please enter a single character", Toast.LENGTH_SHORT).show();
            }
    }
}

然后我从我的 byte 调用类处理程序。如下:

    // Handle the text change to validate input
    EditTextFilter.addTextChangedListener(editText, EditTextFilter.TYPE_BYTE);

如您所见,我只检查值,触发 Toast告诉用户,但这不会改变仍然会在我的 Database 中造成损坏的值.如何确保输入的值在范围内并且小于 Byte.MIN_VALUE或超过 Byte.MAX_VALUE然后将其设置为最小值或最大值。我知道这可能会让人有些困惑,但我希望你们明白我在问什么。

我很感激在这件事上的任何帮助。我看过Is there a way to define a min and max value for EditText in Android?但它没有指定如何处理大于 int 的数字也没有解释如何更改 EditText来自 EditTextFilter类。

提前致谢

最佳答案

您需要重置 EditText 的值或将其设置为您指定的值。下面是我过去用于 MAX/MIN INT 值的示例。它应该类似于您要对 BYTE 值执行的操作。只需获取 EditText 的内容,通过子字符串删除最后一个字符,然后将其写回 EditText。

@Override
public void afterTextChanged(Editable s) {

    if (s.length() == 0) {

    } else {
        Integer cap = Integer.valueOf(etCapture.getText().toString());
        if (cap > MAX) {
            Toast.makeText(SettingsActivity.this, "Out of range. Maximum capture number is " + MAX, Toast.LENGTH_SHORT).show();
            String strCap = etCapture.getText().toString();
            strCap = strCap.substring(0,strCap.length()-1);
            etCapture.setText(strCap);
            etCapture.setSelection(strCap.length());
        } else if (cap < MIN) {
            Toast.makeText(SettingsActivity.this, "Out of range. Minimum capture number is " + MIN, Toast.LENGTH_SHORT).show();
            etCapture.setText(MIN.toString());
        } else {
            SharedPreferences.Editor editor = mSharedPreferences.edit();
            editor.putInt("cap", cap);
            editor.apply();
        }
    }
}

关于Android:EditText 输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609994/

相关文章:

android - mdpi、hdpi、xhdpi 和 xxhdpi 的图像分辨率

java - Android 如何获取手机是否从 sleep 模式恢复

android:检查谷歌驱动器上是否存在文本文件

java - JNI 如何存储字符数组并将其记录在jNI中?

javascript - 验证后禁用/启用 onClick 事件?

javascript - validate.unobtrusive.js,无法显示客户端验证消息,但它适用于表单验证

javascript - 如何验证 HTML 表单?

c++ - 从文件中读入时如何阻止空格显示为回车?

validation - 一种基于Result <_,E1>和Result <T,E2>来获取Result <T,E>的好方法吗?

c- 获取输入后的奇怪行为