2015-01-07 10 views
6

Voglio intercettare da 0 a 9 eventi tasto da tastiera soft in Android. Ho provato molti modi ma non ci sono riuscito. qualsiasi piccolo aiuto mi aiuterà molto.Intercept Numero da 0 a 9 in Android EditText

quello che sto facendo è,

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 


    if (keyCode==KeyEvent.KEYCODE_12) 
    { 
     Toast.makeText(context, "Pressed", Toast.LENGTH_LONG).show(); 

     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

nella mia classe EditText personalizzato, ma non funziona Che cosa mi manca? Ho provato molti codici chiave ma nessun risultato in mano.

+5

Utilizzare un textWatcher – Skynet

+0

hai provato [dispatchKeyEvent] (http://developer.android.com/reference/android/view/ViewGroup.html#dispatchKeyEvent%28android.view.KeyEvent%29)? –

+0

quello che voglio è quando l'utente preme un qualsiasi numero compreso tra 0 e 9, lui/lei non sarà permesso di inserire il numero in EditText. –

risposta

2

Utilizzare un osservatore del testo, la sua molto più semplice:

a livello di classe:

EditText editText; 

in onCreate:

editText = (EditText)findViewById(R.id.yourEdittext) 

editText.addTextChangedListener(mTextEditorWatcher); 

Fuori onCreate (livello di classe):

final TextWatcher mTextEditorWatcher = new TextWatcher(){ 

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


      } 

      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      System.out.println("Entered text: "+editText.getText()); 
       // USe edit_text.getText(); here 
      } 

      public void afterTextChanged(Editable s) { 

      } 
     }; 

Se si desidera limitare l'ingresso sul proprio Modifica testo per soli alfabeti aggiungere questo nel XML di tua modifica controllo di testo:

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 

Se non piace quanto sopra e si vuole raggiungere questo obiettivo attraverso il codice, utilizzare il seguente:

editText.setFilters(new InputFilter[] { 
    new InputFilter() { 
     public CharSequence filter(CharSequence chr, int start, 
       int end, Spanned dst, int dstart, int dend) { 
      if(chr.equals("")){ 
       return chr; 
      } 
      if(chr.toString().matches("[a-zA-Z ]+")){ 
       return chr; 
      } 
      return ""; 
     } 
    } 
}); 
+0

non è possibile utilizzare TextWatcher.i non si desidera che l'utente autorizzi l'immissione del numero in EditText. –

+0

Quindi utilizzare un costrutto if else in textWatcher – Skynet

+0

Se non si desidera che l'utente inserisca un numero in editText, sarebbe molto più semplice specificare il proprio inputType in XML – Skynet