【问题标题】:Modeless PopupWindow as Keyboard无模式弹出窗口作为键盘
【发布时间】:2012-04-24 11:53:33
【问题描述】:

我正在尝试为特定领域的输入模拟软件键盘。我正在使用 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: view android.widget.LinearLayout@40526268 being added, but it already has a parent

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 的任何指示?我愿意使用其他一些无模式小部件。

【问题讨论】:

标签: android modal-dialog modeless


【解决方案1】:

PopupWindow 对于您正在尝试做的事情似乎有点沉重,并且当您发现您必须与它作斗争才能做您想做的事情时。为什么不直接将您的键盘实现为 View 并将其粘贴到您的布局中,然后隐藏/显示它?

【讨论】:

  • 设计美学要求软件键盘的行为方式与内置键盘平行。我考虑过隐藏/显示,如果我找不到任何可行的方法,那就是我必须做的。鉴于android键盘是无模式的,我宁愿先走这条路线。
猜你喜欢
  • 2011-04-25
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多