2011-06-08 12 views
16

Ho seguito le varie domande e risposte qui per configurare la mia attività Android per sovrascrivere lo per eseguire la logica quando la tastiera virtuale si apre e si chiude. Ecco gli estratti rilevanti dal mio codice. Ho bollito giù al scenario più semplice:onConfigurationChanged() non attivo per la tastieraHidden

AndroidManifest.xml

... 
<activity 
    android:name=".SearchActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation" 
/> 
... 

SearchActivity.java

... 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    Toast.makeText(this, "onConfigurationChanged()", Toast.LENGTH_SHORT).show(); 
} 
... 

Il codice qui sopra visualizzerà il Toast quando cambio l'orientamento , ma non fa nulla quando la tastiera virtuale si apre o si chiude. Ho provato ad aprire la tastiera virtuale tramite la messa a fuoco EditText e ad aprirla manualmente con una pressione prolungata sul pulsante menu. Non attivare la chiamata .

Quindi il codice sul posto sembra funzionare poiché il cambio di orientamento si attiva, ma non ottengo nulla per la tastiera virtuale. Qualche idea? Se la risposta è "onConfigurationChanged() non cattura gli eventi della tastiera software", qual è la soluzione appropriata per rilevare e gestire questo evento?

Nel caso sia pertinente, sto testando su un Droid X che esegue Gingerbread.

+0

Ho un problema simile, hai finalmente finito? – Jacky

risposta

14

No, onConfigurationChange() non cattura gli eventi di tastiera software: non è una modifica di configurazione. Il cambiamento di orientamento causa l'utilizzo di un nuovo set di risorse (come layout-land vs layout-port), che è la definizione di una modifica della configurazione.

Quindi come si fa? Bene, non c'è nessun evento attivato quando viene visualizzata la tastiera, ma è possibile rilevare quando la tastiera determina la regolazione del layout.

Vedere How to check visibility of software keyboard in Android? per il codice.

+29

Questo suona come un insetto per me. 'keyboardHidden' fa chiaramente parte dell'oggetto' Configuration' e anche usato nell'esempio qui http://developer.android.com/guide/topics/resources/runtime-changes.html Dai doc: 'Un flag che indica se la tastiera è disponibile. A differenza di hardKeyboardHidden, anche questo tiene conto di una tastiera morbida, quindi se la tastiera è nascosta ma è disponibile una tastiera software, sarà impostata su NO. Il valore è uno di: KEYBOARDHIDDEN_NO, KEYBOARDHIDDEN_YES » –

Problemi correlati