Подтвердить что ты не робот

Черный мерцает на Honeycomb WebView

У меня возникла проблема при использовании полей <input type="password"> в устройствах WebView on Honeycomb. Каждый раз, когда прокручивается представление, экран мерцает черным и даже может оставаться черным (за исключением того, что он будет рисовать сфокусированное поле пароля), когда прокрутка заканчивается. Я видел это на всех трех сотовых планшетах, которые я проверил.

Я могу загрузить тот же HTML-код в приложении Browser, и я не вижу этой проблемы. Я попытался изменить многие настройки в WebSettings/WebChromeClient/WebViewClient из WebView и не повезло. Я загрузил код ниже на планшет Froyo, и эта проблема не возникала, поэтому это похоже на проблему сотовой связи.

Кто-нибудь видел это раньше? Я не понимаю, как исправить или обмануть эту проблему в настоящее время.

Вот пример короткого кода, который воспроизводит проблему. Просто сосредоточьте поле пароля и прокрутите вверх и вниз. Там введите поле ввода типа пароля и поле ввода типа текста, чтобы показать, что проблема не возникает в поле типа текста. Тег <div> просто позволяет упростить прокрутку и увидеть проблему, хотя проблема все же происходит без тега <div>.

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class PasswordFieldTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WebView webview = new WebView(this);
        String html = "<html><body><div style=\"with: 120%; height: 200%; border: 20px dashed black;\">" +
            "Password: <input type=\"password\" name=\"passfield\"/><br/>" +
            "Text: <input type=\"text\" name=\"textfield\"/>" +
            "</div></body></html>";
        webview.loadData(html, "text/html", "utf-8");

        setContentView(webview);
    }
}
4b9b3361

Ответ 1

Попробовав все предлагаемое здесь, это, наконец, сработало для меня на всех телефонах:

android:hardwareAccelerated="true"

и

if (android.os.Build.VERSION.SDK_INT < 16) {
 webView.setBackgroundColor(0x00000000);
} else {
 webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
}

Пожалуйста, дайте мне знать, если вы найдете телефон, на котором это не работает. Работает с этими телефонами:

  • note2 (4.1.2)
  • htc one x (4.0.4)
  • galaxy s3 (4.3)
  • nexus4 (4.3)

Ответ 2

Это известная проблема в сотовых устройствах.

Однако это работало для меня -

Compatibility.getCompatibility().setWebSettingsCache(webSettings);

Обязательно реализуйте уровень совместимости, поскольку следующий метод не работает в SDK_INT < 11.

webViewInstance.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Список предлагаемых решений здесь.

Ответ 3

Это звучит как проблема android: cacheColorHint. Попробуйте установить прозрачность в наборе атрибутов WebView.

Ответ 4

Для меня android:layer="software" в файле макета xml отлично работает.