web-dev-qa-db-ja.com

Android KitKatのWebViewレンダリングの問題

私は静的ページがアセットからロードされるWebViewを備えたアプリケーションに取り組んできました(JavaScriptも使用)。このWebViewはKitKatで機能せず、空白のままです。 KitKatのWebViewで発生したレンダリングエンジン(webkitからChromeへ)の変更を認識しており、移行手順を試しました。Android Developersページ。 。

Logcatでは、Chromiumソースからスローされるエラーが発生します。

W/AwContents﹕ nativeOnDraw failed; clearing to background color.

回避策を提案してください。

38
gnuanu

私の場合、Android 4.4では、LogCatでこのエラーメッセージを設定しても黒の背景が表示されました。nativeOnDrawが失敗し、背景色にクリアされました。

Googlingからは、ハードウェアアクセラレーションキャンバスレンダリングがChromium WebViewでサポートされていないためと思われます。この行をWebViewに追加して、ハードウェアアクセラレーションキャンバスを無効にしましたが、現在は機能しています。

mWebview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
44
georgiecasey

私は同じ問題に遭遇しましたが、回避策を見つけました。あなたがしなければならないのは、あなたのウェブページのCSSバックグラウンドを明示的に設定することだけです。そのようです:

body {
  background: white;
}

Webページの背景を明示的に設定しないと、WebViewはその背景を描画できず、透明なWebViewになります。

6
DataDino

これは、クロムWebビューのバグのようです。

問題に関するスレッドは次のとおりです。 https://jira.appcelerator.org/browse/TIMOB-16479

明らかに、受け入れられた答えは確実な修正ではありません。回避策はリンクに記載されています。

4
Tore Rudberg

ハードウェアアクセラレータを無効にすると、パフォーマンスが著しく低下します。私の場合、KitKatで、完了して後で再起動したアクティビティ内でwebview要素を再インスタンス化するときにこれが発生することがわかりました。たくさんの試行錯誤の後、私が追加したとき:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.webViewContainer);
layout.removeAllViews();
webview.destroy();

アクティビティを終了する直前に、問題が解決したようです。私はまだ多くのデバイスでテストしていませんが、このソリューションが適切であれば、WebviewのKitKatのハードウェアアクセラレーションを無効にするよりもはるかに優れています。

0
asiop