1

可能重复:
PopupWindow 未触发 EditText 长按上的系统上下文对话框

在我问这个问题之前,我已经花了几个小时搜索和尝试不同的方法,但没有运气,这与这个问题完全相同,没有答案,我不打算重复这个问题,但我很震惊这个问题没有解决并记录在SO中,因为这个要求很普遍。

这个问题是 100% 可重现的,只需创建一个包含 EditText 的布局的 PopupWindow,然后长按 EditText,系统编辑对话框不会出现,我知道它是一个对话框,因为它的呈现方式。我不确定这是错误还是需要打开一些开关才能使 EditText 在 PopupWindow 中正常工作。

layout/popupwindow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="#ffffff" >

    <EditText android:id="@+id/etText" android:layout_width="fill_parent" android:layout_height="wrap_content" />

</LinearLayout>

在活动中:

PopupWindow pw = new PopupWindow(getLayoutInflater().inflate(R.layout.popupwindow, null), ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true);
pw.setFocusable(true);
pw.setBackgroundDrawable(new BitmapDrawable());
pw.showAtLocation(getWindow().getDecorView(), Gravity.CENTER, 0, 0);

有任何想法吗?

4

1 回答 1

1

我放弃了使用PopupWindow,改用Dialog,经过一些测试,我发现Dialog比PopupWindow好很多,PopupWindow有很多问题:

  1. 在某些版本的 Android 上,PopupWindow 中的 WebView 不响应长按,如果有,它会崩溃。这不是 WebView 问题,而是 PopupWindow 问题。
  2. 当 PopupWindow 和键盘首次显示时,PopupWindow 中的 EditText 将稍微缩小其高度,然后扩展至其原始高度。
  3. PopupWindow 中的 WebView 加载一个页面,其中包含文本输入,如果文本输入有焦点,则无法拦截 BACK 键。
  4. 好多其它的...

现在我使用Dialog作为WebView的容器,所有提到的问题都消失了,只有一个小问题需要解决。在 ICS 上,当显示一个对话框时,我按 HOME 键,然后返回应用程序,该对话框被隐藏,我无法将对话框带回来Dialog.show(),除了这个,一切正常。而且我发誓我再也不会使用 PopupWindow,PopupWindow 很烂!

于 2012-12-15T11:53:11.447 回答