web-dev-qa-db-ja.com

Android WebViewスタイルbackground-color:transparentはAndroid 2.2では無視されます

背景が透明なWebViewの作成に苦労しています。

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

それから私はhtmlページをロードします

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

WebViewの背景色は透明ですが、ページが読み込まれるとすぐに、htmlページの黒い背景で上書きされます。これはAndroid 2.2でのみ発生し、Android 2.1で機能します。

それで、本当に透明にするためにhtmlページのコードに追加するものがありますか?

150
jptsetung

実際にはそれはバグであり、これまでのところ回避策は見つかりませんでした。問題が作成されました。バグはまだハニカムにあります。

重要だと思われる場合はスターを付けてください: http://code.google.com/p/Android/issues/detail?id=14749

31
jptsetung

これは私のために働いた、

mWebView.setBackgroundColor(Color.TRANSPARENT);
275
scottyab

この前述の問題 の下部に解決策があります。 2つのソリューションの組み合わせです。

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

このコードをWebViewerに追加するafterurlをロードすると、機能します(API 11+)。

ハードウェアアクセラレーションがオンの場合でも機能します

123
Ceetn

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

そして、以下は出力のスクリーンショットです。enter image description here

36
osayilgan

これがあなたのやり方です:

最初にプロジェクトのベースを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で私のために働いた

22
Ali

最も重要なことは言及されていません。

Htmlmustには、background-colorbodyに設定されたtransparentタグが必要です。

したがって、完全なソリューションは次のようになります。


HTML

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

以下のコードは正常に動作します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);
    }

上記のコードは私のために完全に使用します。

9
duggu

次のコードは私のために働きますが、私は複数のウェブビューを持っていますが、それらの間のスクロールは少し遅くなります。

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

webView.setBackgroundColor(0);を試してください

7
Andrew Podkin
  • 上記のすべてを試した後。あなたが指定するかどうかは関係ありません
    webView.setBackgroundColor(Color.TRANSPARENT)loadUrl()/loadData()の前後。
  • 重要なのは、マニフェストでAndroid:hardwareAccelerated="false"を明示的に宣言する必要があることです。

テスト済みIceCream Sandwich

6
Gaurav Arora

これを使って

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

myWebView.setBackgroundColor(0);
6
Zahid Habib

これらの行を使用してください.....

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

そして、webviewにデータを読み込んだ後は常に背景色を設定する

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

これは間違いなく動作します。Editbackgroundを使用してXMLで背景を設定します。背景が表示されます

3
Shivendra

WebViewがスクロール可能な場合:

  1. これをマニフェストに追加します。

    Android:hardwareAccelerated="false"
    

OR

  1. レイアウトのWebViewに次を追加します。

    Android:background="@Android:color/transparent"
    Android:layerType="software"
    
  2. 以下を親のスクロールビューに追加します。

    Android:layerType="software"
    
3
Baton

htmlを読み込んだ後にbgを設定します(クイックテストから、htmlを読み込むとbgの色がリセットされるようです。これは2.3用です)。

すでに取得したデータからhtmlを読み込む場合は、bgを(たとえば透明に)設定した.postDelayedを実行するだけで十分です。

2
Lassi Kinnunen

試してみる:

myWebView.setAlpha(0.2f);
0
Abhilash Nair

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);
    }
}
0
Ingemar

何も役に立たない場合は、おそらくwebViewのサイズを固定し、幅と高さをwrap_contentまたはmatch_parentに変更している可能性があります。 Gifを読み込もうとしたときにうまくいきました。

0
Hayk
myWebView.setAlpha(0);

最良の答えです。できます!

0
Wooden Ghost

これは私のために働いた。データのロード後に背景色を設定してみてください。あなたのwebviewオブジェクト上のsetWebViewClientのように:

    webView.setWebViewClient(new WebViewClient(){

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

WebView.setBackgroundColor(Color.parseColor( "#EDEDED"));を試してください。

0
raja