Android IME: показывает пользовательский всплывающую диалог (например, клавиатура Swype), которая может ввести текст в TextView
-
29-09-2019 - |
Вопрос
Мне интересно, как я могу создать пользовательский всплывающую поверхность, как на скриншоте ниже (заимствовано из клавиатуры Swype), где я могу иметь пару кнопок, которые каждый из них совершает строку в текущую «подключенную» TextView
(через а Inputconnection.).
Пожалуйста, обрати внимание: это Inputmethodservice и не обычный Activity
. Отказ Я уже попытался запустить отдельный Activity
с Theme:Dialog
. Отказ Однако, как только один открывается, я теряю сосредоточенность с TextView
и моя клавиатура исчезает (и с этим моим InputConnection
ушел).
Решение
Вы можете попробовать использовать PopupWindow
. Отказ Вам придется сделать немного взлома, чтобы заставить его делать то, что вы хотите, и единственная хорошая документация для этого является источником.
Другие советы
Я тоже ударил голову против этой проблемы, и я наконец понял ее. Вышеуказанные решения верны, хотя, как вы указали, они не могут использоваться из ввода MethodService, потому что это не активность. Хитрость состоит в том, чтобы создать popupwindow В подклассе клавиатурыView. Отказ Используя отрицательную позицию Y, PopupWindow может появиться над клавиатурой, как Swype.
Удачи, Барри
Правильный ответ:
- Создать Всплывающее окно и поставить свой взгляд внутри него
- Вызов popupwindow.setclippingenabledened (false)
- Позвоните [popupwindow.showatlocation ()] (http://developer.android.com/reference/android/widget/popupwindow.html#showatlocation(android.view.view.view.view., int, int, int)) с отрицательной координатой y.
Это покажет ваше всплывающее окно над IME, как на вашем скриншоте.
Мир на тех, кто следит за руководством,
решение :
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();
===== Обновление 30.09.2015 MinputView Его общее название клавиатуры клавиатуры ..
@Override
public View onCreateInputView() {
mInputView =(MyKeyboardView) getLayoutInflater().inflate( R.layout.input, null);
....
}
Больше информации : http://developer.android.com/guide/topics/text/creating-input-method.html.
удачи.