2012-11-27 9 views
14

Ich muss die Android-Tastatur nach einem Klick auf die Schaltfläche zu verbergen.Android: Hide Tastatur nach dem Klick klicken

Ich habe viele Beispiele gesehen, wie sie dies tun, jedoch scheinen sie alle ein bestimmtes editText-Objekt zu verwenden.

z.B.

Mein Problem ist, dass ich den Bildschirm dynamisch aufbaue, also könnte es Mähne Textfelder bearbeiten. Gibt es eine Möglichkeit, die Tastatur zu verstecken, ohne dass ich angeben muss, für welches editText-Objekt ich sie verstecke.

Dank

Martin

+0

Sie es für die gesamte Aktivität verstecken kann, das bringt es auf: http://stackoverflow.com/questions/7789514/how-to-get-activitys-windowtoken-without-view –

Antwort

36

Sie statt es zu Ihrem Layout einstellen könnte, das heißt:

LinearLayout mainLayout; 

// Get your layout set up, this is just an example 
mainLayout = (LinearLayout)findViewById(R.id.myLinearLayout); 

// Then just use the following: 
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(mainLayout.getWindowToken(), 0); 

Dies ist ein Beispiel davon aus, dass Ihr Layout unabhängig von EditText Objekte wie viele erstellt werden (oder andere Objekte) werden darauf gelegt.

Bearbeiten: Auch etwas, das ich sehr nützlich finde, ist sicherzustellen, dass die Tastatur ausgeblendet wird, wenn eine Aktivität startet (dh: wenn ein EditText ist das erste, konzentrierte). Um dies zu erreichen, habe ich dies in onCreate() Methode der Aktivität:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
+0

Du kleiner Stern du. Funktioniert gut. –

+1

danke burmat Ihren Code mir sehr helfen – Simmant

+0

Beachten Sie, dass es auch für andere Ansichtsteile funktioniert, z. ein EditText :) Dann würden Sie die folgende Zeile ändern: 'imm.hideSoftInputFromWindow (myEditText.getWindowToken(), 0);' – Michael

20

Vergessen Sie nicht versuchen, fangen Blog zu verwenden, da für den Fall, wenn die Tastatur nicht geöffnet und wenn Sie Schlüssel Tastatur verstecken Code app stürzt

try { 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
} catch (Exception e) { 
    // TODO: handle exception 
} 
+0

bei weitem die einfachste und elegante Lösung –

+0

@upvoted .. Absturz behoben .. thx –

6

Sie die Tastatur verstecken können den folgenden Code verwenden, wahrscheinlich auf dem Click-Ereignis Button:

//================ Hide Virtual Key Board When Clicking==================// 

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow("Your Button/EditText Object".getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); 

//======== Hide Virtual Keyboard =====================// 
2

Mit diesem Code

// Check if no view has focus: 
View view = this.getCurrentFocus(); 
if (view != null) { 
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
} 
1

Wenn das Problem auf eine Tätigkeit ist einfach das folgende funktioniert:

try { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

sonst, wenn der Code in einem Fragment erforderlich ist, gehen Sie wie folgt

try { 
     InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

Damit wird das Ausblenden der Tastatur bei einem Klick auf die Schaltfläche oder jedes andere Ereignis behandelt, das als spezifisch erachtet wird, wenn es in den Ereignisblock geschrieben wird.

0
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0); 
0
edittext.onEditorAction(EditorInfo.IME_ACTION_DONE); 
Verwandte Themen