2011-01-02 13 views
15

Sto creando un semplice gioco di digitazione in Android. Non ho problemi a ricevere input dalla tastiera fisica, ma ora sto cercando di far apparire la tastiera virtuale senza EditText. Finora, ho provato la seguente:Posso usare la tastiera virtuale senza un EditText?

1. EditText con visibility = "invisibile" e questa linea:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(keyboard_edittext, InputMethodManager.SHOW_FORCED); // SHOW_IMPLICIT also failed 

2. Questa linea nella onCreate():

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

Questo metodo visualizzava effettivamente una casella bianca vuota sul 10% inferiore dello schermo ma non sulla tastiera, anche se quando la eseguo ora non fa nulla.

3. Altri due righe nel onCreate():

InputMethodManager m = (InputMethodManager)this.getSystemService (Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 

Nessuna fortuna su uno di questi. È anche possibile visualizzare la tastiera virtuale (e quindi usare onKeyUp/onKeyDown) senza concentrarsi su un EditText?

In questo momento, l'unico modo che posso vedere è quello di approcciare questo è quello di creare la mia implementazione della tastiera virtuale (vale a dire costruirla da zero). Non vedo l'ora!

+0

Anche se si riesce a visualizzare la tastiera virtuale, onKeyUp()/Giù() non verrà richiamato, almeno non per tutti i tasti e su tutte le versioni di Android. In alcune versioni di Android (precedenti) (penso 1.5 e forse 1.6) onKeyDown() viene chiamato con i tasti numerici, ma senza lettere. Ciononostante, in generale l'utilizzo di onKeyDown() per ricevere input da tastiera virtuale non porterà ai risultati desiderati - questo funzionerà solo correttamente usando tastiere fisse. – ubuntudroid

risposta

2

È possibile forzare il SoftKeyboard da mostrare, utilizzando:

 

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

No go go changing to SHOW_FORCED.Anche provato requestFocus(); sull'editoriale ma non ha funzionato neanche. – ang

+0

non funziona! (Android 4.2) –

4

Il seguente codice funziona per me:

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

Io uso questo codice in un gestore onKeyUp quando premo il menu" "pulsante.

+1

non funziona! (Android 4.2) –

+0

Funziona ancora per me. E anche su Android 4.4. – miha

+1

C'è un modo per forzare un determinato tipo di input in quel caso? come solo le cifre .. invece di usare 'setRawInputType' –

2

Assicurarsi di abilitare la tastiera virtuale per la visualizzazione:

setFocusable(true); 
setFocusableInTouchMode(true); 

quindi chiamare:

InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT); 
+0

non funziona! (Android 4.2) –

3

Invece di utilizzare visibility="invisible" è possibile impostare android:alpha="0" sul EditText. Quindi ancora bisogno di un EditText ma non è visibile e si può ottenere l'ingresso dal SoftKeyboard da un onKeyListener()

0

Si noti che se si sta lavorando in modalità orizzontale, l'ingresso morbido creerà un proprio campo di inserimento testo rovinare tutto il tuo duro lavoro È possibile prevenire questo comportamento:

// This makes us remain invisible when in landscape mode. 
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Ora se si è impostato un EditText invisibile, esso rimarrà come è stato fatto.

Problemi correlati