Прозрачный WebView не работает на Android v4.0 - PullRequest
13 голосов
/ 14 февраля 2012

Некоторые предыстории этого вопроса здесь. Это относится к работе с известной ошибкой в ​​Android, когда фон WebView должен быть прозрачным. Стиль Android WebView цвет фона: прозрачный игнорируется на Android 2.2

Он включает в себя WebView, содержащий HTML-документ с прозрачным фоном, поэтому WebView является прозрачным, и HTML-документ может быть наложен на другие представления.

Добавление следующего метода в подкласс WebView и вызов его из конструктора работает для меня на Android v2, v3 и v4, ЗА ИСКЛЮЧЕНИЕМ, когда высота пикселя в WebView больше высоты экрана в пикселях (например, WebView в ScrollView, поэтому длиннее экрана).

protected void setBackgroundToTransparent() {
    this.setBackgroundColor(Color.TRANSPARENT);
    this.setBackgroundDrawable(null);
    if (Build.VERSION.SDK_INT >= 11) // Android v3.0+
        try {
         Method method = View.class.getMethod("setLayerType", int.class,  Paint.class);
         method.invoke(this, 1, new Paint());  // 1 = LAYER_TYPE_SOFTWARE (API11)
        } catch (Exception e) {}
}

Ответы [ 3 ]

11 голосов
/ 23 июля 2013

Я столкнулся с той же проблемой, и обнаружил, что это ошибка в некоторых версиях Android, связанная с аппаратным ускорением.Ответ Spiri выше работает, но мне нужно, чтобы мой WebView был аппаратно ускорен, потому что он должен воспроизводить видео.Что я нашел, работает хорошо, это следующее:

Вместо использования

mWebView.setBackgroundColor(Color.TRANSPARENT);

То, что я использовал, было:

mWebView.setBackgroundColor(Color.argb(1, 255, 255, 255));

Это работало на всех устройствах Android, гдеУ меня ранее была эта проблема.

9 голосов
/ 22 ноября 2012

У меня была похожая проблема с Android-API уровня 16, и это решило ее:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 'view' is a WebView

Это отключает аппаратное ускорение на представлении в соответствии с документацией: http://developer.android.com/guide/topics/graphics/hardware-accel.html

IЯ знаю, что это не тот путь, но так как это известная проблема, если они не находят правильного решения, этот делает свою работу (по крайней мере, для меня).

1 голос
/ 19 сентября 2012

Я потратил пару часов на это на днях и попробовал все возможные ответы на эту тему, а также сам разбирался.Я пришел к вашей же проблеме, где, если веб-просмотр можно прокручивать, то он не будет прозрачным.Единственный способ сделать его прозрачным - отключить рендеринг с помощью графического процессора в меню «Настройки»> «Параметры разработчика».В конце концов я просто проверил, включен ли рендеринг GPU, а затем установил цвет фона, который лучше всего соответствовал.Если вы придумали решение, я был бы впечатлен, услышав его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...