2013-08-05 14 views
5

Come si imposta la messa a fuoco su un pulsante ma senza impostare setFocusableInTouchMode su true?Impostare lo stato attivo su un pulsante

ho provato questo:

button.requestFocus(); 

Che semplicemente non funziona. Allora ho provato questo:

button.setFocusableInTouchMode(true); 
button.requestFocus(); 

Il problema è, si evidenzia il pulsante. Non voglio che il pulsante sia evidenziato in modalità touch. Voglio semplicemente che il pulsante sia selezionato quando l'utente preme il tasto Invio o il tasto Tab.

Per chiarire, voglio semplicemente che il primo pulsante inizi a fuoco quando non è in modalità touch.

risposta

0

Questo risolve il problema perfettamente:

layout.getViewTreeObserver().addOnTouchModeChangeListener(new ViewTreeObserver.OnTouchModeChangeListener() 
{ 
    public void onTouchModeChanged(boolean isInTouchMode) 
    { 
     if (!isInTouchMode) 
      button.requestFocus(); 
    } 
}); 
1

immagino, si vuole questo:

button.setOnKeyListener(new OnKeyListener() { 

      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       switch (keyCode) { 
       case KeyEvent.KEYCODE_ENTER: 
        // HIT THE ENTER KEY 
        break; 
       case KeyEvent.KEYCODE_TAB: 
        // HIT THE TAB KEY 
        break; 
       } 
       return false; 
      } 
     }); 

se non si vuole questo, potrebbe essere chiari? Mi scusi per il mio inglese.

+0

Così non va, perché ci sono diversi pulsanti che possono prendere fuoco. Voglio semplicemente che il primo pulsante inizi con lo stato attivo. Immagino di poter memorizzare la messa a fuoco in una variabile e ignorare il tasto Invio e tutti i tasti premuti di tutti i tasti che potrebbero alterare la messa a fuoco. Ci deve essere un modo migliore per gestire l'attenzione. –

Problemi correlati