为了账号安全,请及时绑定邮箱和手机立即绑定

有办法为Android中的EditText定义min和max值吗?

有办法为Android中的EditText定义min和max值吗?

拉风的咖菲猫 2019-07-19 16:45:07
有办法为Android中的EditText定义min和max值吗?我想为EditText.例如:如果任何人试图在其中输入一个月值,则该值必须介于1-12之间。我可以用TextWatcher但我想知道在布局文件或其他地方是否有其他方法可以做到这一点。编辑:我不想限制字符计数。我想限制价值。例如,如果我限制月份EditText当我输入12个字符时,它会接受它,但是如果我输入了22个字符,它就不能在我进入的时候接受它。
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

如果min==3然后输入以1或2开头的任何数字是不可能的(例如:15,23)
如果min>=10那就不可能输入任何东西,因为每个数字都必须从1,2,3开始.

据我理解,我们无法达到EditText类的简单使用带来的值。InputFilterMinMax,至少对于min值来说不是这样,因为当用户输入一个正数时,这个值就会增加,我们可以很容易地执行一个实时测试,以检查它是否达到了极限,或者超出了范围,并阻止了不符合要求的条目。测试min值是另一回事,因为我们不能确定用户是否已经完成输入,因此无法决定是否应该阻止。

这并不是OP所要求的,但为了验证目的,我在我的解决方案中将InputFilter若要测试最大值,请使用OnFocusChangeListener对象时重新测试最小值。EditText如果用户完成了输入,就会失去焦点,如下所示:

package test;import android.text.InputFilter;import android.text.Spanned;public class InputFilterMax implements InputFilter {private int max;public InputFilterMax(int max) {
    this.max = max;}public InputFilterMax(String max) {
    this.max = Integer.parseInt(max);}@Overridepublic CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {   
    try {
        String replacement = source.subSequence(start, end).toString(); 

        String newVal = dest.toString().substring(0, dstart) + replacement +dest.toString().substring(dend, dest.toString().length());

        int input = Integer.parseInt(newVal);

        if (input<=max)
            return null;
    } catch (NumberFormatException nfe) { }   //Maybe notify user that the value is not good      return "";}}

OnFocusChangeListenerMin

package test;import android.text.TextUtils;import android.view.View;import android.view.View.OnFocusChangeListener;public class OnFocusChangeListenerMin implements OnFocusChangeListener {private int min;public OnFocusChangeListenerMin(int min) {
    this.min = min;}public OnFocusChangeListenerMin(String min) {
    this.min = Integer.parseInt(min);}@Overridepublic void onFocusChange(View v, boolean hasFocus) {
    if(!hasFocus) {
        String val = ((EditText)v).getText().toString();
        if(!TextUtils.isEmpty(val)){
            if(Integer.valueOf(val)<min){
                //Notify user that the value is not good
            }

        }
    }}}

然后在活动中设置InputFilterMaxOnFocusChangeListenerMinEditText注意:您可以在onFocusChangeListener.

mQteEditText.setOnFocusChangeListener( new OnFocusChangeListenerMin('20');mQteEditText.setFilters(new InputFilter[]{new InputFilterMax(getActivity(),'50')});



查看完整回答
反对 回复 2019-07-19
  • 3 回答
  • 0 关注
  • 671 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信