软键盘在WebView DialogFragment中不显示触摸

时间:2013-05-14 18:56:56

标签: java android android-webview ontouchevent android-dialogfragment

修改:我查看了错误page for this;没有答案工作。它似乎是一个尚未解决的Android系统错误。

首先我提到this similar question.但是这个问题的解决方案似乎不是我的解决方案。我的DialogFragment只包含WebViewWebView中的所有内容似乎都是可触摸的。但问题是,当我触摸表单域时,会出现光标但软键盘永远不会出现!

以下是onCreateDialog()类中DialogFragment方法中的代码:

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    WebView web = new WebView(getActivity());
    web.loadUrl(InternetDialog.this.url);
    web.setFocusable(true);
    web.setFocusableInTouchMode(true);
    web.requestFocus(View.FOCUS_DOWN);
    web.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_UP:
                    if (!v.hasFocus()) {
                        v.requestFocus();
                    }
                    break;
            }
            return false;
        }
    });

    builder.setView(web);
    return builder.create();

如何在选择表单字段时显示软键盘?

1 个答案:

答案 0 :(得分:11)

这是一个尚未修复的系统错误。 More information can be found here.似乎这个错误对人来说不同,因此有不同的解决方案。对于我的特殊情况,只有一个解决方案(因为我已经尝试了其他一切)。解决方案:

首先,我为Dialog创建了一个布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<EditText
    android:id="@+id/edit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:visibility="invisible"/>

<WebView
    android:id="@+id/web"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

</RelativeLayout>

然后,在DialogFragment方法的onCreateDialog课程中:

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = LayoutInflater.from(getActivity());
    View v = inflater.inflate(R.layout.internet_dialog, null);

    WebView web = (WebView) v.findViewById(R.id.web);
    EditText edit = (EditText) v.findViewById(R.id.edit);
    edit.setFocusable(true);
    edit.requestFocus();
    web.loadUrl(url);
    this.webView = web;
    builder.setView(v);

    return builder.create();

这就是它的全部内容。之所以这样做是因为我做了一个EditText我把焦点放在了隐形的地方。由于EditText不可见,因此它不会干扰WebView,因为它具有焦点,所以它会适当地拉动软键盘。我希望这有助于陷入类似情况。