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

これは、まだ修正されていないシステム バグです。詳細については、こちらを参照してください。このバグの発生は人によって異なるため、解決策も異なるようです。私の特定のケースでは、解決策は 1 つしかありません (他のすべてを試したので)。解決:

まず、次のレイアウトを作成しました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 に答える