Couleur d’arrière-plan de style Android WebView: transparent ignoré sur Android 2.2

J’ai du mal à créer une WebView avec un fond transparent.

webView.setBackgroundColor(0x00FFFFFF); webView.setBackgroundDrawable(myDrawable); 

Puis je charge une page HTML avec

 <body style="background-color:transparent;" ... 

La couleur d’arrière-plan de WebView est transparente, mais dès que la page est chargée, elle est remplacée par un arrière-plan noir à partir de la page HTML. Cela ne se produit que sur Android 2.2, cela fonctionne sur Android 2.1.

Alors, y a-t-il quelque chose à append dans le code de la page HTML pour le rendre vraiment transparent?

Cela a fonctionné pour moi,

 mWebView.setBackgroundColor(Color.TRANSPARENT); 

Au fond de ce problème mentionné précédemment, il existe une solution. C’est une combinaison de 2 solutions.

 webView.setBackgroundColor(Color.TRANSPARENT); webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); 

Lorsque vous ajoutez ce code à WebViewer après avoir chargé l’URL, cela fonctionne (API 11+).

Il fonctionne même lorsque l’accélération de matériel est activée

J’ai eu le même problème avec 2.2 et aussi en 2.3. J’ai résolu le problème en donnant la valeur alpa en html pas dans Android. J’ai essayé beaucoup de choses et j’ai découvert que setBackgroundColor(); la couleur ne fonctionne pas avec la valeur alpha. webView.setBackgroundColor(Color.argb(128, 0, 0, 0)); ne fonctionnera pas.

alors voici ma solution, a travaillé pour moi.

  Ssortingng webData = SsortingngHelper.addSlashes("< !DOCTYPE html>  
$$$ Content Goes Here ! $$$
");

Et à Java,

  webView = (WebView) findViewById(R.id.webview); webView.setBackgroundColor(0); webView.loadData(webData, "text/html", "UTF-8"); 

Et voici la capture d’écran ci-dessous. entrer la description de l'image ici

En fait, c’est un bug et personne n’a trouvé de solution jusqu’ici. Un problème a été créé. Le bug est toujours là en nid d’abeille.

S’il vous plaît le regarder si vous pensez que c’est important: http://code.google.com/p/android/issues/detail?id=14749

Voici comment vous le faites:

Commencez par créer votre projet sur 11, mais dans AndroidManifest, définissez minSdkVersion sur 8.

android: hardwareAccelerated = “false” est inutile, et incompatible avec 8

 wv.setBackgroundColor(0x00000000); if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); this.wv.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, Ssortingng url) { wv.setBackgroundColor(0x00000000); if (Build.VERSION.SDK_INT >= 11) wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); } }); 

Pour votre sécurité, mettez ceci dans votre style:

 BODY, HTML {background: transparent} 

a travaillé pour moi sur 2.2 et 4

La chose la plus importante n’a pas été mentionnée.

Le code HTML doit avoir une balise body avec la background-color d’ background-color définie sur transparent .

Donc, la solution complète serait:

HTML

  some content 

Activité

  WebView wv = (WebView) findViewById(R.id.webView); wv.setBackgroundColor(0); wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null); wv.loadUrl("file:///android_asset/myview.html"); 

Le code ci-dessous fonctionne très bien Android 3.0+, mais lorsque vous essayez ce code ci-dessous Android 3.0, votre application s’est fermée avec force.

 webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); 

Vous essayez le code ci-dessous sur votre moins que l’API 11 .

 webview.setBackgroundColor(Color.parseColor("#919191")); 

Ou

Vous pouvez également essayer ci-dessous le code qui fonctionne sur toutes les API .

  webview.setBackgroundColor(Color.parseColor("#919191")); if (Build.VERSION.SDK_INT >= 11) { webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); } 

code ci-dessus utiliser plein pour moi.

Le code suivant fonctionne pour moi, bien que je dispose de plusieurs vues Web et que le défilement entre elles est un peu lent.

 v.setBackgroundColor(Color.TRANSPARENT); Paint p = new Paint(); v.setLayerType(LAYER_TYPE_SOFTWARE, p); 

Essayez webView.setBackgroundColor(0);

Utilisez ceci

 WebView myWebView = (WebView) findViewById(R.id.my_web); myWebView.setBackgroundColor(0); 
  • Après avoir tout essayé ci-dessus. J’ai trouvé que ce n’est pas grave non plus vous spécifiez
    webView.setBackgroundColor(Color.TRANSPARENT) avant ou après loadUrl() / loadData() .
  • Ce qui compte, c’est que vous déclariez explicitement android:hardwareAccelerated="false" dans le manifeste.

Testé sur Sandwich IceCream

Il suffit d’utiliser ces lignes …..

 webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null); webView.setBackgroundColor(0x00000000); 

Et rappelez-vous un point qui définit toujours la couleur d’arrière-plan après le chargement des données dans la vue Web.

Si la vue Web est défilable:

  1. Ajoutez ceci au manifeste:

     android:hardwareAccelerated="false" 

OU

  1. Ajoutez ce qui suit à WebView dans la mise en page:

     android:background="@android:color/transparent" android:layerType="software" 
  2. Ajoutez ce qui suit à la vue de défilement des parents:

     android:layerType="software" 
 webView.setBackgroundColor(0x00000000); webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); 

cela fonctionnera certainement .. définir l’arrière-plan en XML avec Editbackground. Maintenant ce fond sera montré

définir le bg après le chargement du html (à partir de tests rapides, il semble que le chargement du html réinitialise la couleur de bg .. c’est pour 2.3).

Si vous chargez le fichier HTML à partir de données que vous avez déjà obtenues, il suffit de faire un .postDelayed dans lequel vous définissez simplement le fichier bg (par exemple, transparent).

Essayez webView.setBackgroundColor (Color.parseColor (“# EDEDED”));

J’essayais de placer une superposition HTML transparente sur ma vue GL, mais il y a toujours des scintillements noirs qui couvrent ma vue GL. Après plusieurs jours d’essayer de se débarrasser de ce scintillement, j’ai trouvé cette solution qui est acceptable pour moi (mais dommage pour Android).

Le problème est que j’ai besoin d’une accélération matérielle pour mes belles animations CSS et webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); n’est pas une option pour moi.

L’astuce consistait à placer une seconde WebView (vide) entre ma vue GL et la superposition HTML. Ce dummyWebView j’ai dit de rendre en mode SW, et maintenant mes superpositions HTML rendent lisses dans HW et plus de scintillement noir.

Je ne sais pas si cela fonctionne sur d’autres appareils que My Acer Iconia A700, mais j’espère que je pourrais aider quelqu’un avec cela.

 public class MyActivity extends Activity { @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); RelativeLayout layout = new RelativeLayout(getApplication()); setContentView(layout); MyGlView glView = new MyGlView(this); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); dummyWebView = new WebView(this); dummyWebView.setLayoutParams(params); dummyWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); dummyWebView.loadData("", "text/plain", "utf8"); dummyWebView.setBackgroundColor(0x00000000); webView = new WebView(this); webView.setLayoutParams(params); webView.loadUrl("http://10.0.21.254:5984/ui/index.html"); webView.setBackgroundColor(0x00000000); layout.addView(glView); layout.addView(dummyWebView); layout.addView(webView); } } 

Cela a fonctionné pour moi. essayez de définir la couleur d’arrière-plan après le chargement des données. pour ce setWebViewClient sur votre object webview comme:

  webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, Ssortingng url) { super.onPageFinished(view, url); webView.setBackgroundColor(Color.BLACK); } }); 

Essaie:

 myWebView.setAlpha(0.2f);