【问题标题】:set the range of numbers from 2 to 1000 in an edit text box in android在 android 的编辑文本框中设置从 2 到 1000 的数字范围
【发布时间】:2014-06-13 17:03:36
【问题描述】:

在我的应用程序中,我有一个编辑文本框,用户只能在其中输入 2 到 1000 之间的数字。我已经对此进行了验证,

例如。如果在小于“2”的设置文本中输入的数字应该是“2”并且我在单击按钮时将这些值保存在共享首选项文件中并保留这些输入值以供进一步使用。

当用户输入任何大于 1000 或小于 2 的数字时,会出现问题,然后按手机的返回键而不是单击按钮,它会保存甚至不允许的错误值。

我也实现了 back press() 方法,但如果键盘打开,我仍然可以使用返回键。我正在尝试做一些事情,用户甚至无法输入任何超过 1000 的数字。键盘停止工作或被禁用,就像这样,编辑文本框甚至没有采用任何不正确的值。 .

简而言之,我想设置一个编辑文本框可以输入的数字范围。

请帮忙

【问题讨论】:

标签: android


【解决方案1】:

您可以使用 Textwatcher 代替按钮单击验证 http://developer.android.com/reference/android/text/TextWatcher.html

例子

editext1.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                // YOur Code
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {

                // TODO Auto-generated method stub
            }
        });

【讨论】:

    【解决方案2】:

    首先制作这个类:

    package com.test;
    
    import android.text.InputFilter;
    import android.text.Spanned;
    
    public class InputFilterMinMax implements InputFilter {
    
        private int min, max;
    
        public InputFilterMinMax(int min, int max) {
            this.min = min;
            this.max = max;
        }
    
        public InputFilterMinMax(String min, String max) {
            this.min = Integer.parseInt(min);
            this.max = Integer.parseInt(max);
        }
    
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {   
            try {
                int input = Integer.parseInt(dest.toString() + source.toString());
                if (isInRange(min, max, input))
                    return null;
            } catch (NumberFormatException nfe) { }     
            return "";
        }
    
        private boolean isInRange(int a, int b, int c) {
            return b > a ? c >= a && c <= b : c >= b && c <= a;
        }
    }
    

    然后在您的活动中使用它:

    EditText et = (EditText) findViewById(R.id.myEditText);
    et.setFilters(new InputFilter[]{ new InputFilterMinMax("1", "12")});
    

    这将只允许用户输入从 1 到 12 的值。

    编辑:

    Set your edittext with android:inputType="number".
    

    谢谢。

    【讨论】:

      【解决方案3】:

      您可以像这样禁用键盘:

       InputMethodManager ipmm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                  ipmm.hideSoftInputFromWindow(url.getWindowToken(), 0);
      

      url 是:

      url = (EditText) findViewById(R.id.eT_webbrowser);
      

      【讨论】:

      • 谢谢,但是这段代码给出了一些错误,说“令牌“hideSoftInputFromWindow”上的语法错误,标识符应该在这个令牌之后”
      • 它在我的代码中非常适合我。就我而言,在 EditText 中输入网址后,我禁用了软键盘,它就可以工作了……再次检查。
      • 我已经检查了好几次......不工作......应编写此代码以禁用键盘。
      • 因为您希望用户输入输入并使用您的代码验证输入。请在验证代码行之后使用此代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多