¿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:
- Certificado de Cliente de Webview de Android, Autenticación Mutua, SSL sobre Webview
- Error en Webview con targetSdkVersion 24
- Vista Web de Android: la página web debe ajustarse a la pantalla del dispositivo
- Webview no muestra la fuente Gujarati
- Inyectar CSS a un sitio con webview en android
(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>
- Vista web de Android con geolocalización de HTML 5
- Escáner de código de barras ZXing para Webapps
- Inserte instagram en Android WebView
- Chromium webview no parece funcionar con Android applyOverrideConfiguration
- Personajes extraños en html webview
- Android Crash Report - Native crash en /system/lib/libc.so causado por webview
- Android WebView PictureListener Deprecated - ¿Todavía no hay alternativa?
- React-Native: Descarga y carga de archivos desde android webview
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