Android 在 webview 中点击输入时键盘不显示
Android keyboard not showing when clicking on input in webview
我在我的 android 应用程序中实现了自定义网络视图。如果我触摸此 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>
请尝试将这些行添加到 XML 文件中的网络视图。
android:focusable="true"
android:focusableInTouchMode="true"
希望对您有所帮助。
就我而言,除了添加
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;
}
}
setFocusable(true)
setFocusableInTouchMode(true)
我在我的 android 应用程序中实现了自定义网络视图。如果我触摸此 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>
请尝试将这些行添加到 XML 文件中的网络视图。
android:focusable="true"
android:focusableInTouchMode="true"
希望对您有所帮助。
就我而言,除了添加
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;
}
}
setFocusable(true)
setFocusableInTouchMode(true)