Android IME: eine benutzerdefinierte Pop-up-Dialog zeigt (wie Swype-Tastatur), welcher Text in den Textview eingeben

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

Frage

Ich frage mich, wie ich ein benutzerdefinierte Pop-up, wie die in dem Screenshot erstellen kann unter (entlehnt aus der Swype-Tastatur), wo ich ein paar Tasten haben kann, die jeweils einen String an den zur Zeit begehen „verbunden "TextView (über einen InputConnection ).

Bitte beachten Sie: Dies ist ein InputMethodService und keine gewöhnliche Activity. Ich habe bereits versucht, einen separaten Activity mit Theme:Dialog starten. Doch sobald das man öffnet verliere ich meinen Fokus mit dem TextView und meiner Tastatur verschwindet (und damit meine InputConnection ist weg).

Swype

War es hilfreich?

Lösung

Sie können versuchen Sie es mit einem PopupWindow . Sie werden ein wenig Hacking zu tun haben, um es zu tun, was Sie wollen, und die einzige gute Dokumentation ist die Quelle.

Andere Tipps

Ich schlage meinen Kopf gegen dieses Problem auch, und ich es endlich herausgefunden. Die oben genannten Lösungen sind richtig, obwohl, wie Sie wies darauf hin, sie nicht von einem InputMethodService verwendet werden kann, weil es keine Aktivität ist. Der Trick ist, den PopupWindow in einer Unterklasse von KeyboardView zu erstellen. Durch die Verwendung einer negativen Y-Position kann die PopupWindow oberhalb der Tastatur wie Swype erscheinen.

Viel Glück, Barry

Die richtige Antwort:

  1. Erstellen Sie eine PopupWindow und setzen Sie Ihren Blick ins Innere es
  2. Rufen Sie popupWindow.setClippingEnabled (false)
  3. Anruf [popupWindow.showAtLocation ()] ( http://developer.android.com/reference/android/widget/PopupWindow.html#showAtLocation (android.view.View , int, int, int)) mit einem negativen Y-Koordinate.

Dies wird Ihren Popup über dem IME wie in Ihrem Screenshot zeigt.

Friede sei mit denen, die die Führung folgen,

Lösung:

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 seine die allgemeine Bezeichnung der Tastatur Klasse ..siehe

@Override
    public View onCreateInputView() {
        mInputView =(MyKeyboardView) getLayoutInflater().inflate( R.layout.input, null);
....
}

Mehr Infos: http://developer.android.com /guide/topics/text/creating-input-method.html

viel Glück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top