2010-05-09 4 views
8

Sto sviluppando su Droid Incredible (e ho testato anche su un emulatore AVD 1.5) e una delle schede nel mio widget schede è costituita da un listview e una riga con un EditText e un Pulsante Invia (per una funzione di chat). Sto usando quanto segue per chiudere la tastiera virtuale dopo aver fatto clic su Invia, ma non funziona. Questo è identico al codice che ho trovato altrove che le persone hanno svitato come corretto.Nascondi tastiera software non funzionante

Vedi qualcosa che mi manca?

// in Button's onClick(): 
EditText chatTextBox = (EditText) findViewById(R.id.chat_entry); 
// Handle button click ... 
chatTextBox.setText(""); 

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(chatTextBox.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 

Ho anche provato a cambiare la bandiera su 0. Nessuna fortuna. Qualcuno sa cosa succede ??

**** EDIT **** Ho appena realizzato che inizialmente utilizzavo hideSoftInputFromInputMethod() anziché hideSoftInputFromWindow(). Cambiarlo non ha funzionato però ...

risposta

20

Cambiare HIDE_IMPLICIT_ONLY a 0 lo ha fatto (dopo essere passato a hideSoftInputFromWindow() da hideSoftInputFromInputMethod()).

Tuttavia non sono sicuro del motivo per cui HIDE_IMPLICIT_ONLY non funziona poiché non sto aprendo esplicitamente la tastiera con una pressione prolungata su Menu.

+0

Se si mostrerà tastiera con la bandiera 'SHOW_FORCED'then indica che l'utente ha costretto il metodo di ingresso aperto (come da menù di lunga pressatura) in modo che non dovrebbe essere chiuso fino a quando non esplicitamente farlo. [Vedi Documentazione] (http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#SHOW_FORCED) –

+0

Se hai ** Forced ** mostrato tastiera e vuoi nascondere allora usa il seguente codice 'InputMethodManager imm = (InputMethodManager) mContext.getSystemService (Context.INPUT_METHOD_SERVICE); \t \t imm.hideSoftInputFromWindow (mEditText.getWindowToken(), 0); ' –

11

Un'altra opzione per evitare che l'attività in AndroidManifest.xml presentare

android: windowSoftInputMode = "stateAlwaysHidden" - Questo metodo consentirà di evitare il carico/che mostra la tastiera quando viene caricato l'attività. Ma quando si fa clic sul componente modificabile come edittext, la tastiera si aprirà. perfetto per il mio requisito.

<activity 
      android:name=".Name" 
      android:label="@string/app_name" 
      android:windowSoftInputMode="stateAlwaysHidden"> 
+0

funziona correttamente quando la tastiera non si muore mai. buono. – beginners

5

1.First legano la modifica del token di testo con la tastiera ed aperta
cioè inputMethodManager.showSoftInput(_edittext, 0); // qui _edittext è istanza di vista

2.keyboard otterrà nascosto automaticamente se il testo di modifica si nasconde dallo schermo

3.edit testo è ancora sullo schermo ma si desidera nascondere la tastiera quindi utilizzare sotto il codice imm.hideSoftInputFromWindow(_edittext.getWindowToken(), 0); // t il suo non funzionerà se edittext non è sullo schermo o non è focalizzato.

+1

Questa è la migliore risposta di sempre !!! Ha spiegato il mistero dietro a tutti i nascondigli della tastiera – ulusoyca