2012-10-08 15 views
9

Sto aprendo uno Dialog all'interno di uno Activity. Quando si apre la finestra di dialogo, che io chiamoNascondere la tastiera di input software quando la finestra di dialogo si chiude

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

Il problema è, quando chiudo la finestra di dialogo o premendo un pulsante Annulla o facendo clic al di fuori della finestra di dialogo, gli interruttori della tastiera a una tastiera testo e non va via util I fai clic sul pulsante Indietro dell'hardware. Come posso ignorare la tastiera quando la finestra di dialogo viene chiusa e lo stato attivo viene restituito alla finestra precedente?

+0

qualsiasi soluzione su questo? – tactoth

risposta

1
AlertDialog.Builder builder = new AlertDialog.Builder(EllipticalActivity.this); 
builder.setTitle("title") 
     .setMessage("message") 
     .setCancelable(false) 
     .setNegativeButton("Close", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       InputMethodManager inputManager = 
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
                InputMethodManager.HIDE_NOT_ALWAYS); 
       dialog.cancel(); 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
+0

Guardando il tuo codice, questo chiuderà la tastiera solo se clicco su un pulsante. Mi piacerebbe chiudere per più di un motivo: fare clic su un pulsante, fare clic all'esterno o completare la finestra di dialogo. Ha più senso rilevare solo quando la finestra di dialogo è chiusa, anziché in bianco, elencando tutti i possibili modi in cui la finestra può essere chiusa. – gatzkerob

1

Immagino che questo metodo dell'attività possa esserti utile.

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     // TODO Auto-generated method stub 
     super.onWindowFocusChanged(hasFocus); 
     if(hasFocus) 
     { 
      Toast.makeText(MainActivity.this, "has focus", Toast.LENGTH_LONG).show(); 
         // write code to remove keyboard 
     } 
    } 
0

Nel mio caso, la soluzione era di mettere la tastiera nascondere nella finestra respingere

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
    @Override 
    public void onDismiss(DialogInterface dialog) { 
     View view = activity.getCurrentFocus(); 
     if (view != null) { 
      InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    } 
}); 
0

da Activity onCreateView() il metodo si può fare questo:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) 

o in XML Manifest

android:windowSoftInputMode="stateAlwaysHidden" 

E nasconderà automaticamente tastiera software su Congeda di dialogo

4

in AndroidManifest.xml, impostare questa proprietà nel vostro attività che mostrano il Dialog

android: windowSoftInputMode = "stateAlwaysHidden"

Nota! non stateHiddent, è stateAlwaysHidden. Nasconderà automaticamente la tastiera virtuale su Ignora di dialogo.

Spero che ti salvi la vita.

+0

Grazie @Weiliang Chik, mi hai salvato il tempo –

+0

@ParmarSubhash, non la tua vita? – Faser

Problemi correlati