IME Android: mostra una finestra di dialogo personalizzata pop-up (come tastiera Swype) che può immettere del testo nell'apparecchio TextView

StackOverflow https://stackoverflow.com/questions/3514392

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

Swype

È stato utile?

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:

  1. Crea un PopupWindow e mettere la vostra vista al suo interno
  2. popupWindow.setClippingEnabled (false)
  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top