我想知道如何创建一个像下面屏幕截图中的自定义弹出窗口(从 Swype 键盘借来的),我可以在其中有几个按钮,每个按钮都将一个字符串提交给当前“已连接” TextView
(通过一个输入连接)。
请注意:这是InputMethodService而不是普通的Activity
. 我已经尝试Activity
用Theme:Dialog
. 然而,一旦那个打开,我失去了我的焦点,TextView
我的键盘消失了(我的键盘消失InputConnection
了)。
我想知道如何创建一个像下面屏幕截图中的自定义弹出窗口(从 Swype 键盘借来的),我可以在其中有几个按钮,每个按钮都将一个字符串提交给当前“已连接” TextView
(通过一个输入连接)。
请注意:这是InputMethodService而不是普通的Activity
. 我已经尝试Activity
用Theme:Dialog
. 然而,一旦那个打开,我失去了我的焦点,TextView
我的键盘消失了(我的键盘消失InputConnection
了)。
您可以尝试使用PopupWindow
. 你必须做一些黑客攻击才能让它做你想做的事情,唯一好的文档就是源代码。
我也在努力解决这个问题,我终于弄明白了。上述解决方案是正确的,尽管正如您指出的那样,它们不能从 InputMethodService 中使用,因为它不是 Activity。诀窍是在 KeyboardView 的子类中创建 PopupWindow。通过使用负 Y 位置,PopupWindow 可以像 Swype 一样出现在键盘上方。
祝你好运,巴里
愿那些遵循指引的人平安,
解决方案 :
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 30.09.2015 mInputView 它的键盘类的通用名称..see
@Override
public View onCreateInputView() {
mInputView =(MyKeyboardView) getLayoutInflater().inflate( R.layout.input, null);
....
}
更多信息:http: //developer.android.com/guide/topics/text/creating-input-method.html
祝你好运。
正确答案:
这将在 IME 上方显示您的弹出窗口,如您的屏幕截图所示。