通过即时应用InputFilter来限制成对的EditText输入

时间:2019-05-11 07:58:34

标签: java android validation user-interface

简介

我在对Android项目中的一对EditText值执行验证时遇到了一些麻烦。语言是Java。 android:inputType="number"已设置。默认情况下,两个视图都是空的。

例如,验证规则是editTextAeditTextB不能都为零。理想情况下,应该在用户完成任一视图中的输入时执行验证。

更新的问题:

这是另一个例子。 editTextAeditTextB的值总计不能超过5。

使用TextWatcher似乎可以,但是还远远不够。我认为最好的方法是根据某种控件的当前值以某种方式限制用户输入。假设onCreate包含以下代码:

editTextA.setFilters(new InputFilter[]{ new InputFilterMinMax("0", "5")});
editTextB.setFilters(new InputFilter[]{ new InputFilterMinMax("0", "5")});

其中InputFilterMinMax是根据Is there a way to define a min and max value for EditText in Android?实现InputFilter的类

现在让我们假设editTextA的值变为3。editTextB的最大过滤器值现在应该是2而不是5。

问题是可以即时应用吗?

原始问题部分:

问题1:我试图设置EditorActionListener,但是控件失去焦点的方法也太多了,我无法使验证代码在所有情况下都能正常工作。我尝试过:

if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT || actionId = EditorInfo.IME_ACTION_PREVIOUS) {
    // get values of A and B
    return (valueA+valueB>0);
}
return false;

例如,当用户直接单击另一个控件时,它似乎不起作用。

问题2:上面的方法似乎不能以一致的方式工作,特别是当我尝试设置错误时。在动作侦听器中应该在哪里setError()调用

总体而言,上述方法显得笨拙。还有其他方法可以执行这种验证吗?

0 个答案:

没有答案