WebView «clignotant» avec un arrière-plan blanc si l’accélération matérielle est activée (Android 3.0+)

J’ai un problème avec WebView (Android 3.0+), que WebView affiche toujours sur fond blanc avant d’afficher mon arrière-plan noir (“clignotant”). Voici mon code de test simple:

@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://", "" + "body {background-color: #000}img{max-width:100%}" + "" + "" + "", "text/html", "UTF-8", null); } 

J’ai essayé de nombreuses solutions pour résoudre ce problème, mais pas de chance.

PS: le problème n’apparaîtra pas si l’accélération matérielle est désactivée. Quelqu’un a-t-il le même problème et l’a résolu?

Je vous remercie.

J’ai trouvé que le correctif le plus efficace pour cela, mentionné en premier ici , était de définir une couleur d’arrière-plan transparente une fois la mise en page gonflée:

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

Oui, c’est un hack total, mais c’est la seule solution que j’ai trouvé pour fonctionner correctement sans désactiver l’accélération matérielle.

Notez que cela ne fonctionne pas en définissant l’arrière-plan en XML.

Cela a été résolu dans Jellybean, bien que certains utilisateurs aient signalé avoir vu cela dans KitKat. Vérifiez que vous n’avez pas désactivé l’accélération matérielle, et si le problème disparaît effectivement, vous souhaiterez probablement envelopper ce code dans une instruction conditionnelle pour ne cibler que des périphériques plus anciens:

 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { webView.setBackgroundColor(Color.argb(1, 0, 0, 0)); } 

J’ai activé l’accélération matérielle pour l’application et l’ai désactivée pour l’activité. De plus, je règle le fond à null , comme mentionné ci-dessus. Ça marche pour moi maintenant.

Une autre approche (non testée): définissez le type de calque sur le rendu logiciel et définissez l’arrière-plan sur Color.TRANSPARENT (ou 0 ): webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Greetz Thorsten

Avait ce problème sur Android 4.4.4 et aucune des autres solutions ne fonctionnait ici. J’étais de toute façon en train de onPageFinished() avec onPageFinished() , alors autant essayer quelque onPageFinished() qui devrait être à l’épreuve des balles:

Je mets cela dans le onCreateView() du fragment qui héberge 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, Ssortingng url) { view.setVisibility(View.VISIBLE); super.onPageFinished(view, url); } }); 

L’idée est simplement de masquer WebView jusqu’à ce que la première page soit chargée. Cependant, il me restait encore un petit éclair blanc jusqu’à ce que webView.setBackgroundColor(Color.argb(1, 0, 0, 0)); également la solution fournie par Paul Lammertsma, webView.setBackgroundColor(Color.argb(1, 0, 0, 0));

Il est évidemment terrible “fonctionnalité” de la version Android> 3. Même l’application officielle Google Reader contient ce flash blanc. La solution consiste à désactiver l’accélération matérielle pour l’activité pour laquelle vous devez utiliser l’affichage Web rapide.

Eu le même problème avec la vue web. J’ai travaillé sur Ice Cream Sandwich et le fait de mettre MinSdk = 13 dans Android Manifest a fonctionné pour moi. Essayez de l’expérimenter. Je suppose qu’il y a un bug dans le SDK.

Va comme ça:

 WebView web=(WebView)findViewById(R.id.web); web.setBackgroundColor(0xff000000);