5

I am trying to apply some kind of verification to an edittext. A user should only be able to enter integers between 1 and 60. I am wondering whether I should let them type whatever they like and when they focus off of the edittext check the contents and if it is out of bounds change the value to a default, say 0.

Or is there a way to limit the keyboard to only allow integers?

UPDATE: I am doing everything programmatically. So far I have been able to limit to only numeric input and have a maximum of 2 characters by implementing the following. I am still struggling to limit only values between 0 and 60 though.

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

3 に答える 3

2

を利用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"
于 2012-05-06T00:40:28.753 に答える
1

数字のみに制限する場合は、

EditText.addTextChangedListener

入力された値を取得し、60 を超えていないことを確認する

レイアウト xml ファイルにを追加android:numeric="integer" することで、数字のみを簡単に許可でき ます。EditText

言及する価値はありますが、android:numeric="integer"現在は非推奨です

于 2012-05-06T00:35:11.807 に答える
1

私はそれを持っている!私は永遠にインターネットを精査し、それを機能させるためにいくつかのことをまとめました. 基本的には、ユーザーが特定の edittext ボックスにフォーカスしている間、常に実行される並列プロセスを実行します。ユーザーが最初の整数スロットに 0 ~ 5 のみを入力できるようにフィルターを設定しますが、2 番目の整数スロットには 0 ~ 9 を入力できます。これは明らかに 1 から 60 ではなく 0 から 59 を返しますが、それはとにかく数秒間必要です。このコードは、クラス内で 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;}                               

        }
    });

最初の部分で述べたように、これにより、ユーザーは編集テキスト ボックスに 00 から 59 までの数字しか入力できないようになります。少しずさんに見えるかもしれませんし、おそらくいくつかの if ステートメントで少しクリーンアップできるかもしれませんが、私が知る限り、それは完全に完全に機能し、システムをまったく遅くしているようには見えません. これがあなたの助けになることを願っています。

于 2012-06-13T23:45:38.073 に答える