2012-05-06 12 views
5

編集テキストに何らかの検証を適用しようとしています。ユーザーは1から60までの間の整数しか入力できないはずです。私は、彼らが好きなものを入力できるようにするべきかどうか、また、edittextに焦点を当てるときに内容をチェックして、範囲外であれば、 0と言う。Android EditTextからIntegerへの入力を制限します

または、整数だけを許可するようにキーボードを制限する方法はありますか?

更新日: 私はすべてをプログラム的に実行しています。これまでのところ、私は数値入力だけに制限でき、以下を実装することで最大2文字を持つことができました。私はまだ0と60の間の値だけを制限するために苦労しています。

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

答えて

1

あなたは数字のみに制限する場合は、あなたがinputed値を取得し、それが60

上であなたは簡単に android:numeric="integer"を追加することによって、数字のみを許可することができませんを確認するために

EditText.addTextChangedListener 

を使用することができます 〜EditTextレイアウトxmlファイル

android:numeric="integer"は廃止されました

+0

'android:numeric =" integer "'は非常に細かく便利ですが、悲しいかなか非難されています。 – TechNyquist

2

android.text.method.KeyListenerを使用すると、現在の入力を好きなものに置き換えることができます。あなたの入力は、あなたが探しているものを超えているかどうかを確認することの

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 

}); 

メイクの使用とあなたも怠慢キーことができます:あなたはすべてのキーを変更するには持っていけないので

あなたは、このようなaddTextChangedListener(TextWatcher watcher)メソッドを使用することができますそのループをチェックしてください。 XMLで

  • だけandroid:inputType="number"を使用する番号を使用している場合。
  • 数字の数を2に制限するには、android:maxLength="2"が含まれます。
1

私はそれを持っています!私はインターネットを永遠に精査し、いくつかのことを一緒にして働かせました。 基本的には、ユーザーが特定の編集ボックスに専念している間、常に実行される並列プロセスが実行されます。ユーザが最初の整数スロットに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;}        

     } 
    }); 

、これはそれのユーザーになりますedittextボックスに入力できるのは00から59までの数字だけです。私はそれが少し不潔に見えるかもしれないことを知っている、それはおそらくいくつかのifステートメントで少しきれいにすることができますが、私はそれが絶対に完全に動作すると言うことができる限り、システムをまったく遅くしないようです。これが将来のグーグル・グーグルに役立つことを願っています。

+0

私はちょうどそこに7を入れたいと思うだろうか? – Iurii

関連する問題