5

Android (4.4) の最後の更新で奇妙な問題に直面しています: 私の CSS レンダリングはユーザーの画面に表示されます。

私は android.webkit.WebView を使用して、次のような html 文字列を表示しています。

webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);

この WebView には次のサイズが設定されています:

  • Webview 幅の画面幅の 90%
  • Webview の高さの WRAP_CONTENT

CSS は Web ビューの幅に合わせて作成され、高さは自動的に調整されます。css に設定された絶対的な幅や高さはありません。

webview を表示すると (onPageFinished コールバックを使用して読み込みが完了したことを確認したため、既に完全に読み込まれています)、CSS のレンダリングが開始されます。webview を読み込んだときにレンダリングする必要があると思っていたので、これは驚くべきことです。問題は、ユーザーにとって非常に小さな白い線が表示され、この線が Web ビューの設定に合わせて調整されることです。

CSS で幅を修正すれば、レンダリングの問題はありません。しかし、すべての画面サイズに合わせたいので、それはできません。

CSS が完全にレンダリングされるまで画面に何も表示されないため、Android 4.4 より前では問題はありませんでした。

ちなみに、webview から setPictureListener() メソッドを使用していました。このメソッドが非推奨であることは知っています (そして、しばらくの間は廃止されています) が、Web ビューが画面上で「描画」されるのを実際にいつ終了したかを知る唯一の方法でした。Android 4.4 でこのメソッドを使用すると、何度も呼び出され、DDMS でこのエラーが発生します。

W/UnimplementedWebViewApi(23891): Unimplemented WebView method run called from: android.os.Handler.handleCallback(Handler.java:733)

直接的な関係があるかどうかはわかりませんが、この方法を使用しなくても CSS が正しくレンダリングされないため、そうではないと思います。

私は多くのことを試しました:

  • javascript onload を使用して本文を表示する
  • webview で chrome クライアントを使用し、進行状況が 100% になるまで待って、webview を表示する
  • webview クライアントを使用し、onPageFinished が webview を表示するのを待ちます
  • PictureListener を使用して Web ビューを表示する場合は、500 ミリ秒の postDelayed を使用します。
  • HARDWARE / SOFTWARE / NONE のすべてのレイヤ タイプの選択肢を使用します。
  • WebView の親を最初に INVISIBLE / GONE にしてから VISIBLE にする

しかし、何も機能しませんでした。WebView がユーザーに表示されている場合にのみ、CSS がレンダリングされるようです。

専門的な目的のため、ソース コードを表示することはできません。そのため、どこで検索できるかについて別の視点のみを希望します (または、誰かが DDMS でこの奇妙なエラーを既に見ている場合)。

この webview を表示する前に、CSS が webview でレンダリングされるのを待つ方法について誰かが考えていますか?

どうもありがとう

4

1 に答える 1

1

私はこの問題を解決することができました。

HTML のメイン div のスタイルがdisplay: table;あり、これを削除すると、レンダリングが見栄えがよくなります。

以前のバージョンの Android では問題なく動作していたため、webview のバグなのか、CSS の問題なのか判断できません。

ところで、私の問題を見てくれてありがとう

于 2013-11-07T02:43:33.133 に答える