2012-11-27 20 views
14

Ho bisogno di nascondere la tastiera Android dopo un clic del mouse.Android: Nascondi tastiera dopo il clic del pulsante

Ho visto molti esempi su come eseguire questa operazione, tuttavia, sembrano tutti utilizzare uno specifico oggetto editText.

ad es.

Il mio problema è che sto costruendo lo schermo in modo dinamico, quindi potrebbero esserci campi di testo di modifica di criniera. C'è un modo in cui la tastiera può essere nascosta senza che io debba specificare per quale oggetto editText lo sto nascondendo.

Grazie

Martin

+0

È possibile nascondere per tutta l'attività, questo riassume bene: http://stackoverflow.com/questions/7789514/how-to-get-activitys-windowtoken-without-view –

risposta

36

Si potrebbe invece impostare per il layout, vale a dire:

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); 

Questo è un esempio supponendo che il layout sarà creata indipendentemente dal numero di EditText oggetti (o altri oggetti) sono posti su di esso.

Modifica: Inoltre, qualcosa che ritengo molto utile è assicurarsi che la tastiera sia nascosta quando si avvia per la prima volta un'attività (ad esempio: se una prima cosa è focalizzata su EditText). Per fare questo, ho messo questo in onCreate() modalità di attività:

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

Sei piccola stella. Funziona a meraviglia. –

+1

grazie burmat il tuo codice mi aiuta molto – Simmant

+0

Nota che funziona anche per altre parti di visualizzazione, ad es. un EditText :) Quindi cambieresti la seguente riga: 'imm.hideSoftInputFromWindow (myEditText.getWindowToken(), 0);' – Michael

20

Non dimenticate di utilizzare blog try cattura perché nel caso in cui la tastiera si apre e se si utilizza Tasto codice di discussione nascondere applicazione sarà in crash

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

di gran lunga la soluzione più semplice ed elegante –

+0

@upvoted .. crash fixed .. thx –

6

È possibile nascondere la tastiera utilizzando il seguente codice, probabilmente sul pulsante evento click:

//================ 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

si utilizza questo codice

// 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

Se il problema è un'attività semplicemente il seguente funzionerà:

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

altro, se il codice è necessario in un frammento effettuare le seguenti operazioni

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

Questo gestirà l'occultamento della tastiera su un clic del pulsante o qualsiasi altro evento come ritenuto specifico quando scritto all'interno del blocco eventi.

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