¿Hay alguna manera de hacer que una vista web que ejecuta android 4.0 se realice a un nivel aceptable?
Tanto en el emulador como en mi dispositivo galaxia nexus, esta sencilla aplicación de demostración tarda un total de 1000 milisegundos o más en seleccionar o deseleccionar una casilla de verificación. Quería escribir la mayoría de mi aplicación en javascript para poder reutilizar el código a través de ios / android / web, pero este es un disyuntor de acuerdo.
Aquí está mi código:
- Cómo mejorar el rendimiento de JS menú arrastrar en WebView en Android
- Comportamiento extraño al usar WebView y RelativeLayout en pantalla completa
- Android PhoneGap con controles nativos
- WebView con cliente HTTP personalizado
- Monkeyrunner no toca la vista web
(La actividad)
package com.mycompanyname; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.app.Activity; import android.app.AlertDialog; import android.os.Bundle; import android.webkit.ConsoleMessage; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebSettings.RenderPriority; import android.webkit.WebView; import android.webkit.WebViewClient; import com.mycompanyname.R; public class JavascriptListViewTestActivity extends Activity { private JavascriptListViewTestActivity parent = this; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebChromeClient chrome = new WebChromeClient() { @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { parent.showDialog(consoleMessage.message() + "\n" + consoleMessage.lineNumber()); return true; } }; WebViewClient client = new WebViewClient() { }; WebView webView = (WebView)findViewById(R.id.webView1); webView.setWebChromeClient(chrome); webView.setWebViewClient(client); webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAppCacheEnabled(false); webView.getSettings().setBuiltInZoomControls(false); webView.getSettings().setDatabaseEnabled(false); webView.getSettings().setDomStorageEnabled(false); webView.getSettings().setGeolocationEnabled(false); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false); webView.getSettings().setLightTouchEnabled(false); webView.getSettings().setLoadWithOverviewMode(false); webView.getSettings().setNavDump(false); webView.getSettings().setNeedInitialFocus(false); webView.getSettings().setPluginsEnabled(false); webView.getSettings().setRenderPriority(RenderPriority.HIGH); webView.getSettings().setSaveFormData(false); webView.getSettings().setSavePassword(false); webView.getSettings().setSupportMultipleWindows(false); webView.getSettings().setSupportZoom(false); webView.getSettings().setUseDoubleTree(false); webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); String html = readText(R.raw.listview); webView.loadData(html, "text/html", "UTF-8"); } private void showDialog(String message) { AlertDialog alert = new AlertDialog.Builder(parent).create(); alert.setMessage(message); alert.show(); } private String readText(int resourceId) { InputStream is = this.getResources().openRawResource(resourceId); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String readLine = null; StringBuffer outputBuffer = new StringBuffer(); try { while ((readLine = br.readLine()) != null) { outputBuffer.append(readLine); } return outputBuffer.toString(); } catch (Exception e) { e.printStackTrace(); return ""; } finally { // TODO: might throw - use IOUtils.close() try { is.close(); br.close(); } catch (IOException ex) { showDialog(ex.toString()); } } } }
(El diseño xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
(El html cargado en la webview)
<html> <body> <input type="checkbox" /> </body> </html>
- Android webview permanecer en la aplicación
- Señal 11 SIGSEGV Crash en Galaxy S3 Android WebView
- Mostrar la versión en caché de webview en android
- Entrada de archivo HTML en android webview (android 4.4, kitkat)
- La página Web Gujarati no se muestra perfecta en la vista Web
- Vista web de Android: detección de desplazamiento
- Android- PhoneGap / WebView ignora las metaetiquetas de la ventana de visualización?
- Android Webview Javascript - Referencias a secuencias de comandos no funcionan
Me doy cuenta de que esto tiene más de un año, pero puedes intentar implementar fastclick.js: https://github.com/ftlabs/fastclick
Lo he utilizado con éxito en bastantes proyectos. Como explica la página:
… los navegadores móviles esperarán aproximadamente 300 ms desde el momento en que pulse el botón para disparar el evento de clic. La razón de esto es que el navegador está esperando para ver si realmente está realizando un doble toque.
Lo mismo ocurre con las interacciones dentro de una webview (por lo que sé).
- Dibuje un android.media.Image a una superficie
- Android BroadcastReceiver android.intent.action.BATTERY_CHANGED