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>
これらの行をXMLファイルのWebビューに追加してみてください。
Android:focusable="true"
Android:focusableInTouchMode="true"
それが役に立てば幸い。
私の場合、追加することは別として
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;
}
}