2010-11-23 14 views
47

Sto visualizzando una finestra di dialogo con una vista di modifica. Tuttavia, il softkeyboard si aprirà solo se l'utente preme all'interno di editview. Così ho provato a chiamare un InputMethodManager con il seguente codice.Mostra tastiera virtuale per finestra di dialogo

InputMethodManager imm = 
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(dialogField,0); 

Il campo di dialogo è Campo di dialogo. Tuttavia, quando esattamente dovrei farlo? L'ho provato nel metodo onStart() della finestra di dialogo, ma non succede nulla. Ho anche provato a richiedere lo stato attivo per il dialogField, ma questo non modifica nulla.

Ho provato anche questo codice

dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener() 
{ 
    public void onFocusChange (View v, boolean hasFocus) 
    { 
     if (hasFocus) 
     { 
      Main.log("here"); 
      dialogInput.getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
      /* 
       InputMethodManager mgr = 
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       mgr.showSoftInput(dialogField,0); 
      */ 
     } 
    } 
}); 

in entrambe le versioni. Ma nessuna tastiera virtuale vorrebbe apparire. Il Main.log è solo un log, che mi mostra che la funzione è effettivamente chiamata. E sì, è chiamato.

Potrei ottenere la tastiera con il flag SHOW_FORCED prima che la finestra di dialogo si apra. Ma poi non si chiuderà all'uscita. E posso solo farlo PRIMA che mostri la finestra di dialogo. All'interno di ogni callback non funziona neanche.

+0

Hai provato il flag SHOW_IMPLICIT? –

+1

Questo è qualcosa con cui ho lottato eccessivamente ma che non sono riuscito a lavorare correttamente. – Thomas

+0

Sì, ho provato il flag SHOW_IMPLICIT. La documentazione dice esattamente che è necessario chiamare showSoftInput, se si prevede che l'utente faccia l'input per un TextEdit. Ma come? – Rene

risposta

-3

Sembra impossibile.

Quindi ho creato una nuova attività al posto della finestra di dialogo e l'utente ha lasciato la modifica. Nota che nelle attività puoi impostare la modalità tastiera nel file manifest. L'ho impostato per mostrare, quando si apre l'attività.

Si noti inoltre che il test sull'emulatore con chiavi hardware non aprirà la tastiera per SHOW_IMPLICIT o 0 flag.

+1

Quindi non è mai stato possibile? –

+0

È possibile, vedere risposta accettata. –

+0

@MertSerimer Non esiste una risposta accettata: P – SparK

130

Bella domanda, stavo cercando di farlo anche io e ho trovato una soluzione.

Uso della classe costruttore di dialogo AlertDialog.Builder si dovrà aprire la finestra come questa:

AlertDialog.Builder builder = new AlertDialog.Builder(); 
AlertDialog dialog; 

builder.set... 

dialog = builder.create(); 
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
dialog.show(); 

questo ha funzionato bene per me.

Nota: è necessario import android.view.WindowManager.LayoutParams; per il valore costante lì.

+1

funziona per me, grazie – ericn

+0

Mi chiedo come questo influenzi il comportamento della finestra dopo la chiusura della finestra di dialogo ... non dimentichiamo che la finestra contiene anche la finestra di dialogo e le attività –

+0

non impostare la tastiera su un comportamento "always on", questo attiva solo il metodo a tastiera aperta durante l'apertura del dialogo. Una volta che l'utente preme il "tasto indietro" o lascia il campo di immissione, la tastiera si chiuderà di nuovo, come farebbe normalmente. – SparK

Problemi correlati