web-dev-qa-db-ja.com

Android webviewの入力をクリックするとキーボードが表示されない

AndroidアプリにカスタムWebビューを実装しています。このWebビュー内の入力またはテキスト領域をタッチすると、ソフトキーボードが表示されません。Webビューのタッチリスナーをオーバーライドしていません。マニフェストの内容も変更していません。キーボードが表示されない理由を誰かが理解するのを手伝ってもらえますか?

私のレイアウトコード:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Android.support.v4.widget.SwipeRefreshLayout
        Android:id="@+id/swipeRefreshLayout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <nl.AEGEE.enschede.Android.AEGEEWebView
            Android:id="@+id/webView"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />

    </Android.support.v4.widget.SwipeRefreshLayout>

    <ProgressBar
        Android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        Android:progressTint="@color/aegee_blue"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="-6dp"
        Android:layout_alignParentTop="true" />

</RelativeLayout>
14
Victor

これらの行をXMLファイルのWebビューに追加してみてください。

Android:focusable="true"
Android:focusableInTouchMode="true"

それが役に立てば幸い。

15
Kristo

私の場合、追加することは別として

Android:focusable="true"
Android:focusableInTouchMode="true"

また、WebViewをサブクラス化して、このメソッドを追加する必要がありました

@Override
public boolean onCheckIsTextEditor() {
    return true;
}

私は このスレッド から解決策を得ました。そこでは他の多くの解決策が提案されています。

誰かがそれを使用したい場合、これはWebViewサブクラス全体です

public class CustomWebView extends WebView {
    public CustomWebView(Context context) {
        super(context);

        init();
    }

    public CustomWebView(Context context, AttributeSet attrs) {
        super(context, attrs);

        init();
    }

    public CustomWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        init();
    }

    protected void init() {
        setFocusable(true);
        setFocusableInTouchMode(true);
    }

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        BaseInputConnection baseInputConnection = new BaseInputConnection(this, false);
        outAttrs.imeOptions = IME_ACTION_DONE;
        outAttrs.inputType = TYPE_CLASS_TEXT;
        return baseInputConnection;
    }

    @Override
    public boolean onCheckIsTextEditor() {
        return true;
    }
}
2
voghDev