2012-02-16 21 views
10

Il mio obiettivo è mostrare/nascondere la tastiera software sullo schermo su alcuni eventi e intercettare l'input da quella tastiera.Mostra tastiera software senza EditText

Ho scoperto che la tastiera virtuale può essere visualizzata per alcuni discendenti della classe View, ma non ho bisogno di alcuna rappresentazione visiva del widget di modifica del testo sullo schermo, solo la possibilità di mostrare in modo programmato Nascondi tastiera virtuale con intercettazione di input.

Qual è il modo migliore per raggiungere questo obiettivo?

risposta

3

È possibile forzare il SoftKeyboard per essere mostrato utilizzando:

InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED); 

e per nascondere:

((InputMethodManager) YourActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(findViewById(R.id.YOUR_VIEW).getWindowToken(), 0); 
+0

Questo metodo non ha funzionato. showSoftInput restituisce false e nessuna tastiera viene mostrata – Nekuromento

+0

dovrebbe funzionare, ma puoi provare la seguente riga: im.showSoftInput (this, InputMethodManager.SHOW_IMPLICIT); – Vikram

15

Anche se questa domanda è stato chiesto quasi un anno fa, non ha avuto un accettati e la risposta completamente utile e dal momento che mi sono imbattuto nello stesso problema io stesso avrei condiviso la mia soluzione:

Come ha sottolineato Vikram, questo è il modo di mostrare l'ingresso software:

InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED); 

MA è necessario anche impostare la visualizzazione come attivabile e attivabile in modalità touch:

myView.setFocusable(true); 
myView.setFocusableInTouchMode(true); 

o nella vostra visualizzazione XML:

android:focusable = "true" 
android:focusableInTouchMode = "true" 
+0

Come si intercetta l'input della tastiera? – bgolson

+1

Devi essere un po 'più specifico. Intercettare in che modo? È possibile eseguire l'override di View.onKeyDown (int keyCode, KeyEvent event). È questo che vuoi dire? – britzl

+0

+1 Grazie! Questo è quello che stavo cercando. – bgolson

2

In realtà, è possibile always spettacolo un input da tastiera morbido da manifest. aggiungere questa riga per ogni attività che si desidera visualizzare tastiera virtuale:

android:windowSoftInputMode="stateAlwaysVisible" 

tastiera virtuale verrà visualizzato, non importa se non c'è EditText nella vista. esempio:

<activity android:name=".ChatActivity" 
    android:windowSoftInputMode="stateAlwaysVisible"> 

</activity> 
Problemi correlati