2

编辑:我已经查看了这个错误页面;没有答案工作。看来这是一个Android尚未解决的系统错误。

首先,我提到了这个类似的问题。但是这个问题的解决方案似乎不是我的解决方案。我有一个DialogFragment只包含一个WebView. 里面的一切WebView似乎都触手可及。然而,问题是当我触摸一个表单域时,光标出现了,但软键盘从来没有出现过!

这是我在类中的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();

选择表单域时如何显示软键盘?

4

1 回答 1

13

这是一个尚未修复的系统错误。更多信息可以在这里找到。似乎这个错误对人们来说发生的方式不同,因此有不同的解决方案。对于我的特殊情况,只有一个解决方案(因为我已经尝试了其他所有方法)。解决方案:

首先,我创建了一个布局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并且由于它具有焦点,因此可以适当地向上拉软键盘。我希望这有助于任何陷入类似情况的人。

于 2013-05-15T19:05:53.593 回答