Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无模式弹出窗口作为键盘_Android_Modal Dialog_Modeless - Fatal编程技术网

Android 无模式弹出窗口作为键盘

Android 无模式弹出窗口作为键盘,android,modal-dialog,modeless,Android,Modal Dialog,Modeless,我正在尝试为特定于域的输入模拟软件键盘。我正在使用一个弹出窗口来收集输入并将其传输到底层的EditText。不幸的是,PopupWindow是模态的,因此用户不能像通常的软件键盘那样从一个EditText切换到另一个EditText。我已经研究过设置标志\u NOT\u TOUCH\u MODAL标志,但是我不确定什么时候或者应该应用什么来获得我想要的行为 我启动PopupWindow的代码如下所示: myEdit.setOnClickListener(new View.OnClickListe

我正在尝试为特定于域的输入模拟软件键盘。我正在使用一个弹出窗口来收集输入并将其传输到底层的EditText。不幸的是,PopupWindow是模态的,因此用户不能像通常的软件键盘那样从一个EditText切换到另一个EditText。我已经研究过设置标志\u NOT\u TOUCH\u MODAL标志,但是我不确定什么时候或者应该应用什么来获得我想要的行为

我启动PopupWindow的代码如下所示:

myEdit.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
      pw = myKeyboard.getPopupWindow((EditText) v);

      pw.showAtLocation(Main.this.findViewById(R.id.main), Gravity.BOTTOM, 0, 0);
   }
});
我尝试将其更改为以下内容,但这只会导致运行时异常:java.lang.RuntimeException:view android.widget。LinearLayout@40526268正在添加,但它已具有父级

我也在研究setOutsideTouchable,但到目前为止,我还没有取得任何进展


有没有关于如何创建无模式弹出窗口的建议?我愿意使用其他一些非模态的小部件。

弹出窗口对于您试图做的事情来说似乎有点沉重,当您发现您必须与它斗争才能做您想要的事情时。为什么不将键盘实现为视图,并将其粘贴到布局中,然后隐藏/显示它?

设计美学要求软件键盘的行为与内置键盘类似。我考虑过隐藏/显示,如果我找不到任何有效的方法,那就是我必须要做的。鉴于android键盘是非模态的,我宁愿先采用这种方式。你有没有找到解决方案?谢谢。我最终选择了一个稍微不同的方法。这一问题讨论了这一办法:
myEdit.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
      pw = myKeyboard.getPopupWindow((EditText) v);

      WindowManager.LayoutParams wlp = getWindow().getAttributes();
      wlp.gravity = Gravity.BOTTOM;
      wlp.flags = wlp.flags | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
      getWindow().addContentView(pw.getContentView(), wlp);

      pw.showAtLocation(Main.this.findViewById(R.id.main), Gravity.BOTTOM, 0, 0);
  }
});