안드로이드 WebView 스타일 배경색 : 안드로이드 2.2에서 무시되는 투명


156

투명한 배경으로 WebView를 만드는 데 어려움을 겪고 있습니다.

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

그런 다음 html 페이지를

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

WebView의 배경색은 투명하지만 페이지가로드 되 자마자 html 페이지의 검정색 배경으로 덮어 씁니다. 이것은 안드로이드 2.2에서만 발생하며 안드로이드 2.1에서 작동합니다.

html 페이지 코드에 추가하여 실제로 투명하게 만들 수 있습니까?


1
죄송 합니다만, 내 문제로 여기에 나열된 해결책이 효과가 없습니다 ... : = (thx 어쨌든 .. 웹 페이지는 항상 흰색 배경을 사용했습니다 ...
cV2

답변:


291

이것은 나를 위해 일했다.

mWebView.setBackgroundColor(Color.TRANSPARENT);

1
실제로 OS 2.2에서 테스트 했습니까?
jptsetung

87
URL이나 데이터를로드 한 후에 이것이 호출되어야한다는 것을 알았습니다 .
Mark

11
당신이 사용하는 경우 안드로이드 3.x에서 작동하지 않습니다android:hardwareAccelerated="true"
Macarse

2
ICS (4.0.3)에서는 위의 설명 외에 API 설정 10에서 작동하도록 투명성을 얻으려면 "설정-> 개발자 옵션-> GPU 렌더링 강제 실행"을 비활성화해야합니다.
Aki

10
분명히 나는이 답변이 왜 그렇게 많은 표를 얻는 지 이해하지 못합니다. webView.setBackgroundColor (0x00000000); webView.setBackgroundColor (0x00FFFFFF)와 정확히 동일합니다. 알파 값은 0x00입니다.
jptsetung

128

앞에서 언급 한이 문제 의 맨 아래 에는 해결책이 있습니다. 두 가지 솔루션의 조합입니다.

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

URL 로드 한 WebViewer에이 코드를 추가하면 작동합니다 (API 11+).

하드웨어 가속이 ON 일 때도 작동


2
Webview가 스크롤 가능하지 않은 한 작동합니다.
Rany Ishak

삼성 S3에서 강제 소프트웨어 렌더링 후 배경색을 설정해야 함
neworld

7
webView.setBackgroundColor (Color.argb (1, 0, 0, 0)); 스크롤 할 때 배경이 깜빡이지 않게하려면
Trent Seed

@Trent 나는 당신의 방법을 시도하고 젤리 빈의 깜박임 문제를 해결하면 이제 진저 브레드에 검은 배경을 표시합니다. 다른 제안?
Tiago

2
이것은 웹뷰에 대한 하드웨어 가속을 비활성화합니다! ! 이것은 나에게 분명하지 않았으며 (: D를 사용하기 전에 그것을 보지 않은 것에 대한 책임), 대답의 마지막 문장은 반대 인상을 남깁니다. 이것은 실제로 많은 것들, 비디오, UI 변환, 스크롤, 캔버스 등에 영향을 미칩니다. 가능한 해결 방법 stackoverflow.com/a/17815574/2487876
Kristjan Liiva

36

2.2와 2.3에서도 같은 문제가있었습니다. 안드로이드가 아닌 html로 알파 값을 지정하여 문제를 해결했습니다. 나는 많은 것을 시도했고 내가 알아 낸 것은 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>");

그리고 자바에서는

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

그리고 아래 출력 화면이 있습니다.여기에 이미지 설명을 입력하십시오


완벽합니다, 감사합니다!
Ayman Mahgoub


22

이것이 당신이하는 방법입니다 :

먼저 프로젝트 기반을 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에서 나를 위해 일했습니다.


이것은 나를 위해 작동합니다 : android : hardwareAccelerated = "false"BODY, HTML {background : transparent}
jayellos

12

가장 중요한 것은 언급되지 않았습니다.

html 에는 태그가로 설정되어 있어야합니다 .bodybackground-colortransparent

따라서 전체 솔루션은 다음과 같습니다.


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

질문에 언급되어 있습니다. 그러나 이것은 모든 안드로이드 버전에서 작동하기를 원한다면해야 할 일의 좋은 이력서 인 것처럼 보입니다.
jptsetung 2016 년

9

아래 코드는 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);
    }

위의 코드는 나를 위해 가득 차 있습니다.


LayerType을 LAYER_TYPE_SOFTWARE로 설정하지 않는 것이 좋습니다. 특히 스크롤 할 때 성능이 크게 저하됩니다.
Navarr

8

시험 webView.setBackgroundColor(0);


1
webView.setBackgroundColor (0x00FFFFFF); 사이에는 차이가 없습니다. 및 webView.setBackgroundColor (0x00); 둘 다 투명한 색이어야합니다.
jptsetung

7

다음 코드 작업은 나를 위해 여러 웹뷰를 가지고 있지만 그 사이에서 스크롤하는 것이 약간 느립니다.

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

3
이것은 Honeycomb에서 작동하지만 불행히도 ICS에서는 작동하지 않습니다. 제길. 그러나이 태그를 사용하면 "android : layerType"속성을 사용하여 레이아웃 파일에서이를 지정하는 것이 더 쉽습니다. 태그가 무시되는 이전 릴리스에서도 잘 작동합니다.
스벤

2
ICS에서도 작동 android:hardwareAccelerated="false"하는 것은 activity요소에 AndroidManifest를 사용하여 전체 활동에 대한 하드웨어 가속을 비활성화하는 것 입니다.
스벤

1
페인트 오브젝트를 불필요하게 작성할 수 있습니다. v.setLayerType(LAYER_TYPE_SOFTWARE, null);또한 작동합니다.
Sergey Glotov


6
  • 위에 주어진 모든 것을 시도한 후. /
    webView.setBackgroundColor(Color.TRANSPARENT)전후에 지정하는 것이 중요하지 않다는 것을 알았습니다 .loadUrl()loadData()
  • 중요한 것은 android:hardwareAccelerated="false"매니페스트에서 명시 적으로 선언해야한다는 것입니다 .

아이스크림 샌드위치에서 테스트


3

이 줄을 사용하십시오 .....

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

webview에서 데이터를로드 한 후 항상 배경색을 설정 하는 점을 기억하십시오 .


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

이것은 확실히 작동합니다. Editbackground로 XML에서 배경을 설정하십시오. 이제 그 배경이 표시됩니다


2

html을로드 한 후 bg를 설정하십시오 (빠른 테스트에서 html을로드하면 bg 색상이 재설정됩니다. 이것은 2.3입니다).

이미 얻은 데이터에서 html을로드하는 경우 .postDelayed를 수행하면 bg를 투명하게 설정하는 것으로 충분합니다.


2

웹뷰가 스크롤 가능한 경우 :

  1. 이것을 매니페스트에 추가하십시오.

    android:hardwareAccelerated="false"

또는

  1. 레이아웃에서 WebView에 다음을 추가하십시오.

    android:background="@android:color/transparent"
    android:layerType="software"
  2. 부모 스크롤보기에 다음을 추가하십시오.

    android:layerType="software"

0

webView.setBackgroundColor (Color.parseColor ( "# EDEDED"));를 시도하십시오.


0

GL보기 위에 투명한 HTML 오버레이를 넣으려고했지만 항상 GL보기를 덮는 검은 색으로 깜박입니다. 며칠 후에이 깜박임을 제거하려고 시도한 결과 나에게 허용되는이 해결 방법을 찾았습니다 (그러나 안드로이드에게는 수치 스럽습니다).

문제는 멋진 CSS 애니메이션을 위해 하드웨어 가속이 필요하다는 것입니다. webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 옵션이 아닙니다.

트릭은 WebView내 GL보기와 HTML 오버레이 사이에 두 번째 (빈)를 두는 것 입니다. 이것은 dummyWebViewSW 모드에서 렌더링하라고 지시했으며 이제 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);
    }
}

갤럭시 넥서스에서 이것을 테스트했지만 안타깝게도 깜박 거림이 남아있었습니다.
Navarr

0

이것은 나를 위해 일했습니다. 데이터가로드 된 후 배경색을 설정하십시오. webview 객체의 setWebViewClient에 대해 다음과 같습니다.

    webView.setWebViewClient(new WebViewClient(){

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

0

시도해보십시오 :

myWebView.setAlpha(0.2f);

0

도움이되지 않으면 sized를 고정 webView하고 너비와 높이를 wrap_content 또는로 변경하십시오 match_parent. Gif를로드하려고 할 때 저에게 효과적이었습니다.


0

BindingAdapter를 다음과 같이 사용할 수 있습니다.

자바

@BindingAdapter("setBackground")
public static void setBackground(WebView view,@ColorRes int resId) {
        view.setBackgroundColor(view.getContext().getResources().getColor(resId));
        view.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
}

XML :

<layout >

    <data>

        <import type="com.tdk.sekini.R" />


    </data>

       <WebView
            ...
            app:setBackground="@{R.color.grey_10_transparent}"/>

</layout>

자원

<color name="grey_10_transparent">#11e6e6e6</color>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.