2012-04-26 3 views
0

私はEditBoxを持っています。ユーザーが入力した数字をチェックする必要があります。そうするためには、番号が正しいときはいつでもユーザがEditBoxに数字を入力できるようなイベントを呼びたい。そうでなければ、数字が正しくないときにユーザが編集ボックスに入力することを許可しない。どのように行うことができます。どのような例であれ私にとって役に立ちます。EditTextで検証を実行する方法

+0

はありません。検証のための例またはパターンを与える。 –

+0

これをチェックアウトhttp://stackoverflow.com/q/2763022/1021695 – KMI

答えて

4

使用onTextChangedListener()とそのbeforeTextChangedMethod(内部で検証)...このような何か...

((EditText)findViewById(R.id.et_testo)).addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
     ((TextView)findViewById(R.id.numcaratteri)).setText(String.format(getString(R.string.caratteri), s.length())); 

    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // Validate here 

    } 

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

    } 

}); 
+0

実際には、編集ボックスで入力中に私は番号を検証したいと私は間違った日付を入力することはできません。ユーザーが正しい番号だけを入力できることを意味します。私は間違った番号を入力することはできません。 – AndroidDev

+0

@Anshuman ..その無効なelseがそれを設定した場合、メソッド内のテキストをクリアしないでください... – ngesh

+0

例で私を見せてもらえますか?私は1時間それにこだわっています – AndroidDev

1

あなたはTextWatcherを使用する必要があります。

あなたはちょうど行くことができますHERE。ここにも例が示されています、あなたはそれを参照することができます。

2
final Pattern pattern = Pattern.compile("[0-9]"); 
editText.addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
     Matcher matcher = pattern.matcher(s); 
     if (matcher.find()) 
     { 
      s.replace(0, s.length(), s.toString().replaceAll("[0-9]", "")); 
     } 
    } 

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

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

}); 
+0

本当に華麗です!右のお金に:) –

0

あなたは2つの方法
1. textwatcher
2. Inputfilter
を使用することができます私は、コードを添付しています両方の

public class MainActivity extends Activity { 
EditText editTxt; 
private TextView regresult; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    editTxt =(EditText)findViewById(R.id.editID); 
    regresult = (TextView)findViewById(R.id.txtID); 
    String urName=editTxt.getText().toString(); 

    editTxt.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});  
    editTxt.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {  
     }   
     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
     }   
     @Override 
     public void afterTextChanged(Editable s) { 
       if (editTxt.getText().toString().matches("(^([0-9]{0,3})?)(\\.[0-9]{0,1})?$")) 
       { 
        regresult.setText(""); 
       } 
       else 
       { 
        regresult.setText("invalid number"); 
       } 
     } 
    }); 
}} 


class DecimalDigitsInputFilter implements InputFilter 
{ 
Pattern mPattern; 

public DecimalDigitsInputFilter() 
{ 
    mPattern = Pattern.compile("(^([0-9]{0,2})?)(\\.[0-9]{0,1})?$"); //here u can give your required pattern 
} 
@Override 
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
    // TODO Auto-generated method stub 
    Matcher matcher = mPattern.matcher(dest); 
     if(!matcher.matches()) 
     { 
      return ""; 
     } 
     return null; 
}} 
あなたができるようにしたいと数字の種類
関連する問題