46

WebView (Android 3.0 以降) に問題があります。WebView は常に白い背景を表示してから、黒い背景 (「点滅」) を表示します。ここに私の簡単なテストコードがあります:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WebView webView = new WebView(this);
    webView.setBackgroundColor(Color.BLACK);
    setContentView(webView);
    loadWebView(webView);
    webView.loadDataWithBaseURL("localhost://", "<html><head>" +
            "<style>body {background-color: #000}img{max-width:100%}</style></head>" +
            "<body>" +
            "<img src=\"http://developer.android.com/images/practices/actionbar-phone-splitaction.png\" />" +
            "</body></html>", 
            "text/html", "UTF-8", null);
}

この問題を解決するために多くの解決策を試しましたが、うまくいきませんでした。

PS: ハードウェア アクセラレーションがオフになっている場合、問題は発生しません。誰かが同じ問題を抱えていて、それを解決しましたか?

ありがとうございました。

4

7 に答える 7

53

これに対する最も効果的な修正は、ここで最初に言及されたもので、レイアウトが膨張した後に透明な背景色を設定することであることがわかりました。

webView.setBackgroundColor(Color.argb(1, 0, 0, 0));

はい、これは完全なハックですが、ハードウェア アクセラレーションを無効にせずにうまく機能することがわかった唯一のソリューションです。

これは、XML で背景を設定しても機能しないことに注意してください。

これは Jellybean では解決されていますが、一部のユーザーは KitKat でこれが見られると報告しています。ハードウェア アクセラレーションを無効にしていないことを確認してください。問題が実際に解消された場合は、そのコードを条件付きステートメントでラップして、古いデバイスのみをターゲットにすることをお勧めします。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
}
于 2013-04-25T14:30:43.713 に答える
13

アプリケーションのハードウェアアクセラレーションを有効にし、アクティビティで無効にしました。nullさらに、上記のように、背景をに設定しました。それは今私のために働きます。

別のアプローチ(未テスト):レイヤータイプをソフトウェアレンダリングに設定し、背景をColor.TRANSPARENT(または0)に設定します。webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

グリーツ・トルステン

于 2012-06-19T14:25:11.907 に答える
9

Android 4.4.4 でこの問題が発生し、他の解決策はどれも機能しませんでした。とにかくいじっていonPageFinished()たので、防弾であるべきことを試してみてください:

onCreateView()これを、WebView をホストするフラグメントの に入れます。

    webView = (WebView) v.findViewById(R.id.webView);
    webView.setVisibility(View.INVISIBLE);
    webView.setBackgroundColor(Color.argb(1, 0, 0, 0));         

    webView.setWebViewClient( new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            view.setVisibility(View.VISIBLE);
            super.onPageFinished(view, url);
        }
    });

アイデアは、最初のページが読み込まれるまで WebView を非表示にすることです。ただし、Paul Lammertsma によって提供されたソリューションも追加するまで、まだ小さな白いフラッシュが表示されました。webView.setBackgroundColor(Color.argb(1, 0, 0, 0));

于 2015-03-30T21:41:09.180 に答える
5

Androidバージョン>3の明らかにひどい「機能」です。公式アプリの Google リーダーにもこの白いフラッシュが含まれています。解決策は、高速描画 Web ビューを使用する必要があるアクティビティの HW アクセラレーションを無効にすることです。

于 2012-09-10T13:55:00.260 に答える
0

Webビューでも同様の問題がありました。私は Ice Cream Sandwich に取り組んでおり、minSdk = 13 を Android Manifest に入れるとうまくいきました。それを実験してみてください。SDKにバグがあると思います。

于 2012-10-05T17:20:19.277 に答える