无模式PopupWindow作为键盘

时间:2012-04-23 23:38:56

标签: android modal-dialog modeless

我正在尝试为特定于域的输入模拟软件键盘。我正在使用PopupWindow收集输入并将其传输到底层的EditText。不幸的是,PopupWindow是模态的,因此用户无法使用通常的软件键盘从一个EditText切换到另一个EditText。我已经研究过设置FLAG_NOT_TOUCH_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:查看android.widget.LinearLayout@40526268已添加,但已有父级

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);
  }
});

我也在调查setOutsideTouchable,但到目前为止我还没有到达任何地方。

关于如何创建无模式PopupWindow的任何指示?我愿意使用其他一些无模式小部件。

1 个答案:

答案 0 :(得分:0)

对于你正在尝试做的事情,PopupWindow似乎有点沉重,而且你发现自己不得不与之抗争以做你想做的事情。为什么不将键盘实现为View并将其粘贴在布局中,然后隐藏/显示它?