Прозрачный WebView не работает на Android v4.0
Некоторая предыстория этого вопроса здесь. Это касается работы с известной ошибкой на Android, где фон WebView должен быть прозрачным.
Цвет фона Android WebView: прозрачный игнорируется на Android 2.2
Он включает WebView, размещающий документ HTML с прозрачным фоном, поэтому WebView прозрачен, и HTML-документ может быть наложен на другие виды.
Добавление к подклассу WebView следующего метода и вызов его из конструктора для меня на Android v2, v3 и v4, EXCEPT, когда высота пикселя 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) {}
}
Ответы
Ответ 1
Я столкнулся с той же проблемой, и обнаружил, что это ошибка в некоторых версиях Android в отношении аппаратного ускорения. Ответ Spiri выше работает, но мне нужно, чтобы мой WebView был аппаратным ускоренным, потому что ему нужно воспроизводить видео. То, что я нашел, работает хорошо, это следующее:
Вместо использования
mWebView.setBackgroundColor(Color.TRANSPARENT);
То, что я использовал, было:
mWebView.setBackgroundColor(Color.argb(1, 255, 255, 255));
Это работало на всех устройствах Android, на которых у меня была эта проблема.
Ответ 2
У меня была аналогичная проблема с уровнем api-авика 16-го уровня, и это решило это:
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 'view' is a WebView
Это отключает аппаратное ускорение в представлении в соответствии с документацией:
http://developer.android.com/guide/topics/graphics/hardware-accel.html
Я знаю, что это не путь, но поскольку это известная проблема, используйте, что они придумали правильное решение, это делает работу (по крайней мере для меня).
Ответ 3
Я потратил пару часов на это на днях и пробовал каждый ответ, возможно, на эту тему, а также на расследование. Я пришел к тому же вопросу, где, если веб-просмотр был прокручиваемым, тогда он не был бы прозрачным. Единственный способ сделать его прозрачным - отключить рендеринг графического процессора в настройках > Параметры разработчика. В конце концов я только что проверил, включен ли gpu-рендеринг, а затем установите фон в некоторый цвет, который наилучшим образом соответствует. Если вы придумаете решение, я был бы впечатлен, услышав его.