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?
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
Cela a fonctionné pour moi
mWebView.setBackgroundColor(Color.TRANSPARENT);
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
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.
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
Le code html must doit avoir une balisebody
avec background-color
défini sur transparent
.
<body style="display: flex; background-color:transparent">some content</body>
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 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.
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);
Essayez webView.setBackgroundColor(0);
webView.setBackgroundColor(Color.TRANSPARENT)
avant ou après loadUrl()
loadData()
.Android:hardwareAccelerated="false"
dans le manifeste.Testé sur _/IceCream Sandwich
Utilisez ceci
WebView myWebView = (WebView) findViewById(R.id.my_web);
myWebView.setBackgroundColor(0);
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.
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é
Si la vue Web est déroulable:
Ajoutez ceci au manifeste:
Android:hardwareAccelerated="false"
OR
Ajoutez les éléments suivants à WebView dans la présentation:
Android:background="@Android:color/transparent"
Android:layerType="software"
Ajoutez ce qui suit à la vue de défilement des parents:
Android:layerType="software"
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).
Essaie:
myWebView.setAlpha(0.2f);
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 dummyWebView
J'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);
}
}
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.
myWebView.setAlpha(0);
est la meilleure réponse. Ça marche!
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);
}
});
Essayez webView.setBackgroundColor (Color.parseColor ("# EDEDED"));