Arrière-plan de style WebView Android-Couleur: transparent ignoré sur android 2.2

j'ai du mal à créer un 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 de fond du WebView est transparente mais dès que la page est chargée, elle est écrasée par un fond noir de la page html. Cela ne se produit que sur android 2.2, il fonctionne sur android 2.1.

donc il y a quelque chose à ajouter dans le code de la page html pour le faire vraiment transparent ?

142
demandé sur jptsetung 2011-02-15 14:39:21

19 réponses

ça a marché pour moi,

mWebView.setBackgroundColor(Color.TRANSPARENT);
264
répondu scottyab 2015-01-02 19:15:18

En bas de cette question il y a une solution. C'est une combinaison de 2 solutions.

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

en ajoutant ce code au WebViewer après en chargeant l'url, cela fonctionne (API 11+).

il fonctionne même quand l'accélération hardeware est sur

120
répondu Ceetn 2015-01-02 18:59:05

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 l'alpa valeur html pas dans android. J'ai essayé beaucoup de choses et ce que j'ai découvert est setBackgroundColor(); couleur ne fonctionne pas avec la valeur alpha. webView.setBackgroundColor(Color.argb(128, 0, 0, 0)); ne marchera pas.

alors voici ma solution, ça a marché 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
répondu osayilgan 2014-07-02 10:46:42

en fait, c'est un bug et personne n'a trouvé de solution pour l'instant. Un problème a été créé. L'insecte est toujours ici dans le nid d'abeille.

s'il vous plaît, commencez si vous pensez que c'est important: http://code.google.com/p/android/issues/detail?id=14749

31
répondu jptsetung 2011-03-01 08:28:20

C'est comment vous le faites:

faites D'abord votre base de projet sur 11, mais dans AndroidManifest mettez minSdkVersion à 8

android: hardwareAccelerated= "false" est inutile, et il 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 la sécurité mettez ceci dans votre style:

BODY, HTML {background: transparent}

a travaillé pour moi sur 2.2 et 4

22
répondu Ali 2012-12-10 18:41:35

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

le code html doit avoir une étiquette body avec background-color fixée à transparent .

ainsi la solution complète serait:



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");
10
répondu lilotop 2014-06-29 11:32:47

ci-dessous le code fonctionne très bien Android 3.0+ mais quand vous essayez ce code sous android 3.0 puis votre application fermée de force.

webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

vous essayez le code ci-dessous sur votre moins API 11 .

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

ou

vous pouvez également essayer ci-dessous le code qui fonctionne sur tous API amende.

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

ci-dessus code d'utilisation complet pour moi.

9
répondu duggu 2013-05-16 04:21:36

suit le travail de code pour moi, bien que j'ai plusieurs webviews et défiler entre eux est un peu léthargique.

v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p); 
7
répondu Umair 2011-12-06 10:54:56

Try webView.setBackgroundColor(0);

6
répondu Andrew Podkin 2011-02-28 19:50:53

utiliser cette

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

myWebView.setBackgroundColor(0);
6
répondu Zahid Habib 2012-09-02 04:34:14
  • après avoir essayé tout ce qui est indiqué ci-dessus. J'ai trouvé que cela n'a pas d'importance que vous spécifiiez

    webView.setBackgroundColor(Color.TRANSPARENT) avant ou après loadUrl() / loadData() .
  • la chose qui importe est que vous devriez déclarer explicitement android:hardwareAccelerated="false" dans le manifeste.

testé sur Sandwich à la crème glacée

6
répondu Gaurav Arora 2012-11-01 06:00:30

utilisez ces lignes .....

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

et rappelez-vous un point que définit toujours la couleur de fond après avoir chargé des données dans webview.

3
répondu Atul Bhardwaj 2013-02-13 06:30:09

si webview est contrôlable:

  1. ajouter ceci au Manifeste:

    android:hardwareAccelerated="false"
    

ou

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

    android:background="@android:color/transparent"
    android:layerType="software"
    
  2. ajouter ce qui suit à la vue parents scroll:

    android:layerType="software"
    
3
répondu Baton 2013-10-28 19:32:50
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

ça va marcher.. définissez background en XML avec Editbackground. Maintenant que le fond sera affiché

3
répondu Shivendra 2014-02-21 14:36:59

définit le bg après avoir chargé le html(à partir de tests rapides, il semble charger le html réinitialise la couleur du bg.. c'est pour 2.3).

si vous chargez le html à partir de données que vous avez déjà, il suffit de faire un .postDelayed dans lequel vous venez de définir le bg(à transparent par exemple) est suffisant..

2
répondu Lassi Kinnunen 2012-02-06 08:53:01

essayez webView.setBackgroundColor (couleur.parseColor ("#EDEDED"));

0
répondu raja 2012-10-29 11:46:07

j'essayais de mettre une superposition HTML transparente au-dessus de ma vue GL mais elle a toujours clignotement noir qui couvre ma vue GL. Après plusieurs jours à essayer de se débarrasser de ce scintillement j'ai trouvé cette solution qui est acceptable pour moi (mais une honte pour android).

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

le truc était de mettre un second (vide) WebView entre ma vue GL et la superposition HTML. Ce dummyWebView j'ai dit de rendre en mode SW, et maintenant mes overlays HTML rend lisse en HW et plus de scintillement noir.

Je ne sais pas si cela fonctionne sur d'autres appareils que mon 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);
    }
}
0
répondu Ingemar 2013-07-05 09:13:28

ça a marché pour moi. essayez de définir la couleur de fond une fois les données chargées. pour ce setWebViewClient sur votre objet webview comme:

    webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            webView.setBackgroundColor(Color.BLACK);
        }
    });
0
répondu Abdul Mohsin 2014-11-03 10:17:08

Essayez-le:

myWebView.setAlpha(0.2f);
0
répondu Abhilash Nair 2018-04-18 19:21:33