Прозрачный 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-рендеринг, а затем установите фон в некоторый цвет, который наилучшим образом соответствует. Если вы придумаете решение, я был бы впечатлен, услышав его.