繁体   English   中英

Android限制EditText到Integer输入

[英]Android Limit EditText to Integer input only

我正在尝试对编辑文本应用某种验证。 用户应该只能输入1到60之间的整数。我想知道是否应该让他们输入他们喜欢的内容,当他们关注edittext检查内容时,如果超出界限则将值更改为默认值,说0。

或者有没有办法限制键盘只允许整数?

更新:我正在以编程方式完成所有工作。 到目前为止,我已经能够限制只有数字输入,并通过实现以下最多2个字符。 我仍然在努力限制0到60之间的值。

    editText.setInputType( InputType.TYPE_CLASS_NUMBER );
    InputFilter[] FilterArray = new InputFilter[1];
    FilterArray[0] = new InputFilter.LengthFilter(2);
    editText.setFilters(FilterArray);

您可以使用android.text.method.KeyListener将当前输入替换为您喜欢的任何内容。

由于您不必更改所有键,您可以使用addTextChangedListener(TextWatcher watcher)方法,如下所示:

EditText editT = (EditText) findViewById(R.id.your_id);
editT.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    // TODO Auto-generated method stub
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub

});

利用它来检查您的输入是否超出您的预期,您甚至可以通过检查该循环来忽略键。

在XML中:

  • 如果您使用的是数字,请使用android:inputType="number"
  • 要将数字的数量限制为2,请包括android:maxLength="2"

如果仅限于数字,则可以使用

EditText.addTextChangedListener

获取该值并确认它不超过60

您可以通过将android:numeric="integer"到布局xml文件中的EditText来轻松地仅允许数字

虽然值得一提的是android:numeric="integer"现已弃用

我懂了! 我永远地搜索了互联网,并把一些东西放在一起让它发挥作用。 基本上它所做的是运行一个并行进程,当用户专注于特定的edittext框时,该进程将持续运行。 它将设置一个过滤器,以便用户只能在第一个整数槽中输入0-5,但允许第二个输入0-9。 这显然会给0-59而不是1-60,但这就是你想要的秒数。 此代码位于类内部的onCreate方法之前:

final InputFilter filter = new InputFilter() 
{
    public CharSequence filter(CharSequence source, int start, int end,
                Spanned dest, int dstart, int dent)
    {
        for (int i = start; i < end; i++)
        {
            if ((source.charAt(start) == "6".charAt(0)) || (source.charAt(start) == "7".charAt(0)) || (source.charAt(start) == "8".charAt(0))
                    || (source.charAt(start) == "9".charAt(0)) || (!Character.isDefined(source.charAt(i))) )                            
            {
                return "";
            }
        }
        return null;
    }
 };

private class FilterCheckerTask extends AsyncTask<Void, Void, Void>
{       
    @Override
    protected Void doInBackground(Void... params) 
    {           
        while(true)
        {               
            if (<EditText>.getText().toString().isEmpty())
            {
                Log.e("empty","empty");                 
                <EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)});              
            }
            else if (<EditText>.getText().toString().charAt(0) >= "6".charAt(0))
            {
                Log.e("front num bad","greater than 5");
                <EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)});
            }
            else 
            {
                Log.e("unfiltered", "unfiltered");
                <EditText>.setFilters(new InputFilter[]{new InputFilter.LengthFilter(2)});      
            }
            if (kicker)
            {
                return null;
            }
        }           
    }       
}

然后,在onCreate方法中:

    Time_sec.setOnFocusChangeListener(new OnFocusChangeListener() 
    {
        public void onFocusChange(View v, boolean hasFocus)
        {
            new FilterCheckerTask().execute();
            if(!hasFocus)
                    {kicker = !hasFocus;}                               

        }
    });

正如我在第一部分中所说的,这将使用户只能在您的edittext框中输入00到59之间的数字。 我知道它可能看起来有点草率,它可能会在一些if语句中清理一下,但据我所知,它的工作绝对完美,并且似乎根本不会减慢系统的速度。 希望这有助于你,如果没有,未来的googlers。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM