web-dev-qa-db-fra.com

Couleur d'arrière-plan du style Android WebView: transparente ignorée sur Android 2.2

J'ai du mal à créer une vue Web avec un arrière-plan transparent.

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

Ensuite, je charge une page HTML avec 

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

La couleur d'arrière-plan de la vue Web 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 à ajouter dans le code de page html pour le rendre vraiment transparent? 

144
jptsetung

En fait, c'est un bug et personne n'a encore trouvé de solution de contournement. Un problème a été créé. Le virus est toujours ici en nid d'abeille.

Indiquez-le si vous pensez que c'est important: http://code.google.com/p/Android/issues/detail?id=14749

31
jptsetung

Cela a fonctionné pour moi

mWebView.setBackgroundColor(Color.TRANSPARENT);
267
scottyab

Au bas de ce problème mentionné précédemment il y a une solution . C'est une combinaison de 2 solutions.

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

Lors de l'ajout de ce code à WebViewer après chargement de l'URL, cela fonctionne (API 11+).

Cela fonctionne même lorsque l'accélération matérielle est activée

120
Ceetn

J'ai eu le même problème avec 2.2 et aussi dans 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(); color ne fonctionne pas avec une valeur alpha. webView.setBackgroundColor(Color.argb(128, 0, 0, 0)); ne fonctionnera pas.

alors voici ma solution, a travaillé pour moi.

      String webData = StringHelper.addSlashes("<!DOCTYPE html><head> <meta http-equiv=\"Content-Type\" " +
      "content=\"text/html; charset=utf-8\"> </head><body><div style=\"background-color: rgba(10,10,10,0.5); " +
      "padding: 20px; height: 260px; border-radius: 8px;\"> $$$ Content Goes Here ! $$$ </div> </body></html>");

Et en Java,

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

Et voici la capture d'écran de sortie ci-dessous.enter image description here

35
osayilgan

Voici comment vous le faites:

Faites d’abord votre projet basé sur 11, mais dans AndroidManifest, définissez minSdkVersion sur 8

Android: hardwareAccelerated = "false" n'est pas nécessaire et est 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, String 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}

travaillé pour moi sur 2.2 et 4

22
Ali

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

Le code html must doit avoir une balisebodyavec background-color défini sur transparent.

La solution complète serait donc:


HTML

    <body style="display: flex; background-color:transparent">some content</body>

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");
11
lilotop

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

webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

Vous essayez ci-dessous le code sur votre moins qu'API 11 .

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

Ou

vous pouvez également essayer le code ci-dessous qui fonctionne sur tous les fichiersAPIfine.

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

ci-dessus utiliser le code complet pour moi.

9
duggu

Après le travail de code pour moi, même si j'ai plusieurs vues Web et leur défilement est un peu lent.

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

Essayez webView.setBackgroundColor(0);

7
Andrew Podkin
  • Après avoir essayé tout ce qui est donné 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 de déclarer explicitement Android:hardwareAccelerated="false" dans le manifeste.

Testé sur _/IceCream Sandwich

6
Gaurav Arora

Utilisez ceci 

WebView myWebView = (WebView) findViewById(R.id.my_web);

myWebView.setBackgroundColor(0);
6
Zahid Habib

Il suffit d'utiliser ces lignes .....

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

Et rappelez-vous un point qui Toujours définir la couleur d'arrière-plan après le chargement de données dans WebView.

3
Atul Bhardwaj
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

cela fonctionnera certainement… définir le fond en XML avec Editbackground. Maintenant, cet arrière-plan sera affiché

3
Shivendra

Si la vue Web est déroulable:

  1. Ajoutez ceci au manifeste:

    Android:hardwareAccelerated="false"
    

OR

  1. Ajoutez les éléments suivants à WebView dans la présentation:

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

    Android:layerType="software"
    
3
Baton

définissez le bg après le chargement du html (des tests rapides semblent indiquer que le chargement du html réinitialise la couleur du bg .. ceci est pour la version 2.3).

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

2
Lassi Kinnunen

Essaie:

myWebView.setAlpha(0.2f);
0
Abhilash Nair

J'essayais de placer une superposition HTML transparente sur ma vue GL, mais le scintillement noir couvrait toujours ma vue GL. Après plusieurs jours passés à essayer de me débarrasser de ce scintillement, j'ai trouvé cette solution de contournement acceptable pour moi (mais dommage pour Android).

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

L'astuce consistait à placer une seconde (vide) WebView entre ma vue GL et la superposition HTML. Cette dummyWebViewJ'ai dit de rendre en mode SW, et maintenant mes superpositions HTML rendent lisse dans HW et plus aucun scintillement noir.

Je ne sais pas si cela fonctionne sur d'autres appareils que Mon Acer Iconia A700, mais j'espère pouvoir 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);
    }
}
0
Ingemar

Si rien ne vous aide, alors vous avez probablement une taille fixe webView, modifiez la largeur et la hauteur en wrap_content ou match_parent, cela devrait fonctionner. Cela a fonctionné pour moi quand j'ai essayé de charger un Gif.

0
Hayk
myWebView.setAlpha(0);

est la meilleure réponse. Ça marche!

0
Wooden Ghost

Cela a fonctionné pour moi. essayez de définir la couleur d'arrière-plan une fois les données chargées. pour que setWebViewClient sur votre objet webview tel que:

    webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            webView.setBackgroundColor(Color.BLACK);
        }
    });
0
Abdul Mohsin

Essayez webView.setBackgroundColor (Color.parseColor ("# EDEDED"));

0
raja