2013-04-19 11 views
7

Ich habe eine Activity mit einzigen Fragment drauf. Es gibt eine EditText auf dem Fragment.Wie Tastatur auf Dialog zu verbergen entlassen

Die Tastatur das Fragment so schnell ist Aufspringen wird jedoch gezeigt, schaffte ich es in dem Manifest android Einstellung zu blockieren: windowSoftInputMode = „stateHidden“

Allerdings gibt auch eine Schaltfläche ist, die mit einem Dialog öffnet sich ein weiterer EditText.

Ich habe eine Methode, die automatisch die Tastatur beim Schließen des Dialogs schließt.

public static void closeInput(final View caller) {  
    caller.post(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 
     } 
    }); 
} 

Die Methode ist kein hübscher Hack und es ist etwas falsch daran. Dialog EditText hat inputType="numberDecimal". Die closeInput() scheint die Tastatur nicht zu schließen und ändert sie nur in den alphabetischen Standardzustand.

Was geht hier vor?

+0

Wie sieht es bei der Erstellung Ihres Dialogs aus, rufen Sie diese Methode und dann erneut auf, wenn der Dialog geschlossen wird? – TronicZomB

+0

Warum würde ich CloseInput bei der Dialogerstellung aufrufen?Zu der Zeit ist keine Eingabe sichtbar –

+0

Oh, ich dachte, das könnte gewesen sein, als die erste und zweite Tastatur erschien. – TronicZomB

Antwort

13

In meinem Fall habe ich Methode:

public static void closeInput(final View caller) { 
    caller.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    }, 100); 
} 

Es weigerte sich richtig in Manifest wegen Aktivität Einstellungen zu arbeiten, wenn ich Sie daran erinnern, dass android:windowSoftInputMode="any_of_these"

gesetzt haben
+0

Es funktioniert. Vielen Dank! –

+0

Betreffend "wenn ich mich erinnere, kann man android nicht haben: windowSoftInputMode =" any_of_these "" - Ich habe es geschafft, alle mit 'windowSoftInputMode =" adjustNothing | stateAlwaysHidden "' und mit 'setSoftInputMode (SOFT_INPUT_ADJUST_PAN | SOFT_INPUT_STATE_ALWAYS_HIDDEN);' – KarolDepka

+3

Meine Tests, Sie brauchen nicht 'postDelayed (runnable, 100)'. Die 100 scheint zerbrechlich zu sein. Sie können stattdessen 'post (runnable)' verwenden (funktioniert für mich). Kann das jemand bestätigen/widerlegen? – KarolDepka

5

in BaseDialog.java

protected void hideSoftKeyboard() { 
    InputMethodManager imm = (InputMethodManager) this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
    if (imm.isActive()) { 
     imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 
    } 
} 
+0

Gesucht nach Tagen, wie dies zu tun ist. Versucht alles in jedem Forum, endlich diese geschlossene Tastatur beim Dialog-Exit. Danke – wizloc

1

in meinem Fall war Lösung Tastatur verstecken sich in Dialog zu setzen

entlassen
7

Von Fragmenten onCreateView() -Methode können Sie dies tun:

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

Es wird automatisch Soft-Tastatur versteckt auf Entlassen von Dialog

+0

es wird geschlossen, wenn die Aktivität mit 'android: windowSoftInputMode =" adjustPan "' auch erklärt wird – crgarridos

1

mit diesem Thema Struggling und nach den Antworten bewerten hier scheinen die meisten tatsächlich zu arbeiten. Da es nicht erwünscht war, eine Klasse eher nur einen Builder zu verwenden, ist die Antwort https://stackoverflow.com/a/36422411/1815624 keine praktikable Lösung. https://stackoverflow.com/a/17393446/1815624 & https://stackoverflow.com/a/32648971/1815624

Antwort der Blick aus dem Fragment ist grabbing sich also die Kombination:

andere Erkenntnis, das gleiche Problem haben, sowohl eine Antwort wird abgeleitet

(Wer ein bekam Grund, nicht?)

void closeKeyboard(final View caller){ 
    caller.post(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) caller.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(caller.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    }); 
} 

...

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
    @Override 
    public void onDismiss(DialogInterface dialog) { 
     closeKeyboard(getView()); 
    } 
}); 
Verwandte Themen