我正在构建一个应用程序,其中有一个 EditText
需要插入一个字节值。 EditText
应该只能接受值 -128 到 127,它们是 Byte.MIN_VALUE
和 Byte.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/