2017-10-31 6 views
0

でEditTexts上のユーザーからのフィードバックを与えます。は、私はこのように、制限されたInputTypeでのEditTextを持っている限られたInputType

ユーザーが許可されていない文字を入力しようとすると、何も起こりません。
この場合、ユーザーのフィードバックをお伝えしたいと思います。例えば。トーストでは "小数点のみしか許されません"。


私の推測では、onTextChangedを使用して、そこに入力を検証しようとしていただろうが、私はこの方法でも制限された入力で呼び出されることをわかりません。


EDIT
私は、M.Saad Lakhanの答えのアイデアを使用setInputTypeフラグを削除し、この正規表現とsetError方法でそれを解決:

public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (!s.toString().matches("[0-9]{1,13}(\\.[0-9]*)?")) 
     { 
      latEdit.setError(wrongInputWarning); 
     } 
    } 
+0

あなたが行くための最善の方法は、1.使用 'addTextChangedListener'あるユーザに戻っていくつかのカスタムフィードバックを与え、そこ2.使用をあなたのロジックを入れたい場合はRxBinding https://github.com/JakeWharton/RxBinding – Debu

答えて

1

yourEditText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (!s.matches("(?<=^|)\d+(\.\d+)?(?=$|)")) 
      { 
       Toast.makeText(getApplicationContext(), "Only digits and . are allowed", Toast.LENGTH_LONG).show(); 
       etNewPassword.requestFocus(); 
       return; 
      } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     textv.setText(s); 
    } 
}); 

内のテキストには、あなたの要件に応じてチェックを適用する必要が変更さ

+0

それを試してみても、それが動作する場合は私のポストを答えとしてマークすることを忘れないでも動作するかどうか教えてください。ハッピーコーディング:) –

+0

残念ながら、間違った入力が処理される前に 'setInputType'によって停止されるので、3つの方法のどれも私にとっては役に立ちません。私はTextChangedListenerで動作するように実装を書き直す必要があると思います –

+0

バディはXMLから単純なedittextを削除してすべてをここで動的に作成します –

0

は、パターン文字列を使用してみてくださいテキストリスナーの文字列と一致させます。 テキストがコンパイルされたパターンと一致しない場合は、エラーメッセージを表示します。

私はあなたのようなこのような問題を抱えていました。 これはあなたにとってもうまくいくと思っています。

latEdit.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); 

次のようにあなたのエディットテキストにaddTextChangeListenerする必要があります:あなたはそれを行う必要がありいけない

1

最初にandroid:inputType="number"をedittext xmlに追加します。これにより、数字キーボードのみが開きます。 addOnTextChangedListnerを追加し、次にonTextChanged()にStringデータを取得する必要があります。

yourEditText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged (CharSequence s,int start, int count, int after){ 

    } 

    @Override 
    public void onTextChanged (CharSequence s,int start, int before, int count){ 
     String text = s.toString(); 
     try { 
      int num = Integer.parseInt(text); 
      Log.i("", num + " is a number"); 
     } catch (NumberFormatException e) { 
      Log.i("", text + " is not a number"); 
     } 

    } 

    @Override 
    public void afterTextChanged (Editable s){ 

    } 
}); 
関連する問題