背景が透明なWebViewの作成に苦労しています。
webView.setBackgroundColor(0x00FFFFFF);
webView.setBackgroundDrawable(myDrawable);
それから私はhtmlページをロードします
<body style="background-color:transparent;" ...
WebViewの背景色は透明ですが、ページが読み込まれるとすぐに、htmlページの黒い背景で上書きされます。これはAndroid 2.2でのみ発生し、Android 2.1で機能します。
それで、本当に透明にするためにhtmlページのコードに追加するものがありますか?
実際にはそれはバグであり、これまでのところ回避策は見つかりませんでした。問題が作成されました。バグはまだハニカムにあります。
重要だと思われる場合はスターを付けてください: http://code.google.com/p/Android/issues/detail?id=14749
これは私のために働いた、
mWebView.setBackgroundColor(Color.TRANSPARENT);
この前述の問題 の下部に解決策があります。 2つのソリューションの組み合わせです。
webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
このコードをWebViewerに追加するafterurlをロードすると、機能します(API 11+)。
ハードウェアアクセラレーションがオンの場合でも機能します
2.2と2.3でも同じ問題がありました。 Androidではなくhtmlでalpa値を指定することで問題を解決しました。私は多くのことを試しましたが、setBackgroundColor();
色がアルファ値で機能しないことがわかりました。 webView.setBackgroundColor(Color.argb(128, 0, 0, 0));
は機能しません。
だからここに私の解決策があります、私のために働いた。
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>");
そして、Javaでは、
webView = (WebView) findViewById(R.id.webview);
webView.setBackgroundColor(0);
webView.loadData(webData, "text/html", "UTF-8");
そして、以下は出力のスクリーンショットです。
これがあなたのやり方です:
最初にプロジェクトのベースを11にしますが、AndroidManifestでminSdkVersionを8に設定します
Android:hardwareAccelerated = "false"は不要であり、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);
}
});
安全のために、これをあなたのスタイルに入れてください:
BODY, HTML {background: transparent}
2.2と4で私のために働いた
Htmlmustには、background-color
がbody
に設定された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");
以下のコードは正常に動作しますAndroid 3.0 +しかし、このコードをAndroid 3.0の下で試すと、アプリは強制的に閉じられます。
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
次のコードをAPI 11未満で試します。
webview.setBackgroundColor(Color.parseColor("#919191"));
または
また、すべてのAPIで動作する以下のコードを試すこともできます。
webview.setBackgroundColor(Color.parseColor("#919191"));
if (Build.VERSION.SDK_INT >= 11) {
webview.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
}
上記のコードは私のために完全に使用します。
次のコードは私のために働きますが、私は複数のウェブビューを持っていますが、それらの間のスクロールは少し遅くなります。
v.setBackgroundColor(Color.TRANSPARENT);
Paint p = new Paint();
v.setLayerType(LAYER_TYPE_SOFTWARE, p);
webView.setBackgroundColor(0);
を試してください
webView.setBackgroundColor(Color.TRANSPARENT)
loadUrl()
/loadData()
の前後。Android:hardwareAccelerated="false"
を明示的に宣言する必要があることです。テスト済みIceCream Sandwich
これを使って
WebView myWebView = (WebView) findViewById(R.id.my_web);
myWebView.setBackgroundColor(0);
これらの行を使用してください.....
webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);
そして、webviewにデータを読み込んだ後は常に背景色を設定する
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
これは間違いなく動作します。Editbackgroundを使用してXMLで背景を設定します。背景が表示されます
WebViewがスクロール可能な場合:
これをマニフェストに追加します。
Android:hardwareAccelerated="false"
OR
レイアウトのWebViewに次を追加します。
Android:background="@Android:color/transparent"
Android:layerType="software"
以下を親のスクロールビューに追加します。
Android:layerType="software"
htmlを読み込んだ後にbgを設定します(クイックテストから、htmlを読み込むとbgの色がリセットされるようです。これは2.3用です)。
すでに取得したデータからhtmlを読み込む場合は、bgを(たとえば透明に)設定した.postDelayedを実行するだけで十分です。
試してみる:
myWebView.setAlpha(0.2f);
GLビューの上に透明なHTMLオーバーレイを配置しようとしましたが、GLビューを覆う黒いちらつきが常にあります。このちらつきを取り除こうと数日後、私はこの回避策を見つけましたが、これは私には受け入れられます(ただし、Androidにとっては残念です)。
問題は、Nice CSSアニメーションにハードウェアアクセラレーションが必要なため、webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
はオプションではないということです。
トリックは、2番目の(空の)WebView
をGLビューとHTMLオーバーレイの間に置くことでした。このdummyWebView
はSWモードでレンダリングするように指示しましたが、HTMLオーバーレイはHWでスムーズにレンダリングされ、黒ちらつきはなくなりました。
これがMy Acer Iconia A700以外のデバイスで機能するかどうかはわかりませんが、誰かがこれを手伝ってくれることを願っています。
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);
}
}
何も役に立たない場合は、おそらくwebView
のサイズを固定し、幅と高さをwrap_contentまたはmatch_parent
に変更している可能性があります。 Gifを読み込もうとしたときにうまくいきました。
myWebView.setAlpha(0);
最良の答えです。できます!
これは私のために働いた。データのロード後に背景色を設定してみてください。あなたのwebviewオブジェクト上のsetWebViewClientのように:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
webView.setBackgroundColor(Color.BLACK);
}
});
WebView.setBackgroundColor(Color.parseColor( "#EDEDED"));を試してください。