Ответ 1
На самом деле это ошибка, и никто пока не нашел обходного пути. Проблема была создана. Ошибка все еще здесь в сотах.
Пожалуйста, напишите, если вы считаете это важным: http://code.google.com/p/android/issues/detail?id=14749
Я пытаюсь создать 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);
В нижней части этой ранее упомянутой проблемы есть решение. Это комбинация из двух решений.
webView.setBackgroundColor(Color.TRANSPARENT);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
При добавлении этого кода в WebViewer после загрузки URL-адреса он работает (API 11 +).
Это даже работает, когда ускорение на жестком диске включено.
У меня была такая же проблема с 2.2, а также в 2.3. Я решил проблему, указав значение alpa в html не в android. Я пробовал много вещей, и что я узнал, цвет 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
В html должен быть тег body
с background-color
установлен на 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);
Try
webView.setBackgroundColor(0);
Используйте этот
WebView myWebView = (WebView) findViewById(R.id.my_web);
myWebView.setBackgroundColor(0);
webView.setBackgroundColor(Color.TRANSPARENT)
до или после loadUrl()
/loadData()
.android:hardwareAccelerated="false"
в манифесте.Протестировано на сэндвич IceCream
Просто используйте эти строки.....
webView.loadDataWithBaseURL(null,"Hello", "text/html", "utf-8", null);
webView.setBackgroundColor(0x00000000);
И помните, что Всегда устанавливать цвет фона после загрузки данных в webview.
Если веб-просмотр прокручивается:
Добавьте это в манифест:
android:hardwareAccelerated="false"
ИЛИ
Добавьте следующее в WebView в макет:
android:background="@android:color/transparent"
android:layerType="software"
Добавьте в список прокрутки родителей следующее:
android:layerType="software"
webView.setBackgroundColor(0x00000000);
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
это определенно сработает.. установить фон в XML с помощью Editbackground. Теперь, когда фон будет показан
установите bg после загрузки html (из быстрых тестов кажется, что загрузка html сбрасывает цвет bg.. это для 2.3).
если вы загружаете html из данных, которые у вас уже есть, просто делать .postDelayed, в котором вы просто установите bg (например, прозрачный), достаточно.
Попробуйте webView.setBackgroundColor(Color.parseColor( "# EDEDED" ));
Я пытался наложить прозрачный наложенный текст над моим GL-представлением, но он всегда черным мерцанием, который покрывает мой взгляд на GL. После нескольких дней, пытаясь избавиться от этого мерцания, я нашел это решение, приемлемое для меня (но позор для Android).
Проблема в том, что мне требуется аппаратное ускорение для моих приятных анимаций CSS, поэтому webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
для меня не вариант.
Трюк состоял в том, чтобы поместить второй (пустой) 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);
}
}
Это сработало для меня. попробуйте установить цвет фона после загрузки данных. для этого setWebViewClient на вашем веб-объекте, например:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
webView.setBackgroundColor(Color.BLACK);
}
});
Проверять:
myWebView.setAlpha(0.2f);