studio how for create chrome based app android webview chromium android-4.4-kitkat

for - how to create an android webview app



Problema de representación WebView en Android KitKat (5)

He estado trabajando en una aplicación que tiene un WebView en el que una página estática se carga de los activos (también usando JavaScript). Este WebView no funciona en KitKat, permanece en blanco. Soy consciente del cambio en el motor de renderizado (webkit a cromo) que ocurrió en WebView en kitkat y probé los pasos para la migración, que se da en la página de Desarrolladores de Android. Pero no ayudó.

En logcat recibo un error que proviene de la fuente de Chromium.

W/AwContents﹕ nativeOnDraw failed; clearing to background color.

Por favor sugiera una solución.


En mi caso, en Android 4.4, estaba obteniendo un fondo negro, no importaba que estableciera qué y este mensaje de error en mi LogCat: error de nativeOnDraw; despejando al color de fondo.

De Google, parece ser porque la reproducción de Canvas acelerada por hardware no es compatible con Chromium WebView. Agregué esta línea a WebView para desactivar el lienzo acelerado por hardware y ahora funciona.

mWebview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);


Esto parece ser un error de cromo webview.

Aquí hay un hilo acerca del problema: https://jira.appcelerator.org/browse/TIMOB-16479

Aparentemente, la respuesta aceptada no es una solución segura. Una solución alternativa se menciona en el enlace.


La desactivación del acelerador de hardware viene con un alto costo de rendimiento. En mi caso, descubrí que en Kitkat esto me sucedía cuando estaba creando una instancia del elemento webview dentro de una actividad que se terminó y luego se reinició. Después de una gran cantidad de prueba y error, cuando agregué:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.webViewContainer); layout.removeAllViews(); webview.destroy();

Justo antes de finalizar la actividad, parece que se ha resuelto el problema. Todavía no lo he probado en muchos dispositivos, pero si esta solución es adecuada, es mucho mejor que deshabilitar la aceleración de hardware de KitKat para la vista web.


Me encontré con el mismo problema, pero encontré una solución alternativa. Todo lo que tiene que hacer es establecer explícitamente un fondo CSS para su página web. Al igual que:

body { background: white; }

Como resulta que si no establece explícitamente un fondo para una página web, la WebView no podrá dibujar dicho fondo y terminará con una vista Web transparente.


package com.example.testandroid; public class MainActivity extends ActionBarActivity { WebView webView=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState != null) { ((WebView)findViewById(R.id.web_view)).restoreState(savedInstanceState); } else{ webView=(WebView)findViewById(R.id.web_view); webView.loadUrl("http://www.google.co.in"); webView.getSettings().getJavaScriptEnabled(); webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } }); } } protected void onSaveInstanceState(Bundle outState) { webView.saveState(outState); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the Back button and if there''s history if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } // If it wasn''t the Back key or there''s no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event); } }