单击webview中的输入时未显示Android键盘

时间:2016-01-05 23:20:39

标签: android webview android-softkeyboard

我在我的Android应用程序中实现了自定义webview。如果我触摸此webview中的输入或文本区域,则软键盘不会显示。我没有在我的webview中覆盖任何touchlisteners,也没有在我的清单中更改任何内容。任何人都可以帮我弄清楚键盘没有显示的原因吗?

我的布局代码:

<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>

3 个答案:

答案 0 :(得分:15)

请尝试将这些行添加到XML文件中的webview中。

android:focusable="true"
android:focusableInTouchMode="true"

希望它有所帮助。

答案 1 :(得分:1)

就我而言,除了添加

android:focusable="true"
android:focusableInTouchMode="true"

我还需要继承WebView并添加此方法

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

我从this thread获得了解决方案,其中提出了许多其他解决方案。

这是整个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 :(得分:0)

setFocusable(true)
setFocusableInTouchMode(true)