IME Android: mostra una finestra di dialogo personalizzata pop-up (come tastiera Swype) che può immettere del testo nell'apparecchio TextView
-
29-09-2019 - |
Domanda
Mi chiedo come posso creare un custom pop-up come quello nella schermata sotto (preso in prestito dalla tastiera Swype), dove posso avere un paio di pulsanti, che ogni commit una stringa al momento "collegato "TextView
(tramite un InputConnection ).
Nota: questo è un InputMethodService e non un Activity
ordinario. Ho già provato il lancio di un Activity
separato con Theme:Dialog
. Tuttavia, non appena che uno apre perdo la messa a fuoco con il TextView
ei miei scompare tastiera (e con quella la mia InputConnection
è andato).
Soluzione
È possibile provare a utilizzare un PopupWindow
. Dovrete fare un po 'di incisione per arrivare a fare quello che vuoi e l'unica buona documentazione è la fonte.
Altri suggerimenti
I sbatteva la testa contro anche questo problema e alla fine ho capito. Le soluzioni di cui sopra sono corrette anche se, come lei ha sottolineato che non possono essere utilizzate da un InputMethodService perché non è un'attività. Il trucco è quello di creare il PopupWindow in una sottoclasse di KeyboardView . Usando una posizione negativa Y, il PopupWindow può apparire sopra la tastiera come Swype.
In bocca al lupo, Barry
Risposta corretta:
- Crea un PopupWindow e mettere la vostra vista al suo interno
- popupWindow.setClippingEnabled (false)
- Chiamata [popupWindow.showAtLocation ()] ( http://developer.android.com/reference/android/widget/PopupWindow.html#showAtLocation (android.view.View , int, int, int)) con un negativo coordinata Y.
Questo mostrerà il tuo pop-up sopra l'IME come nel vostro screenshot.
La pace sia su coloro che seguono la guida,
soluzione:
AlertDialog dialog;
//add this to your code
dialog = builder.create();
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.token = mInputView.getWindowToken();
lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
//end addons
dialog.show();
===== UPDATE 2015/09/30 mInputView suo il nome generico della classe tastiera ..see
@Override
public View onCreateInputView() {
mInputView =(MyKeyboardView) getLayoutInflater().inflate( R.layout.input, null);
....
}
Più informazioni: http://developer.android.com /guide/topics/text/creating-input-method.html
buona fortuna.