Android – Añadir GestureDetector a la vista web
Me gustaría añadir la clase GestureDetector a mi webview para que pueda administrar gestos comunes como doubletap.
Esto es lo que estoy tratando de lograr:
- Eliminar espacio en blanco no deseado en WebView Android
- Cómo hacer que mi proyecto sea compatible con diferentes versiones de sdk mientras utiliza funciones para una versión específica
- Cómo utilizar una fuente personalizada con WebView
- ¿Cuál es el archivo html más grande que se puede cargar en un WebView de Android?
- Android- PhoneGap / WebView ignora las metaetiquetas de la ventana de visualización?
- SingleTap funcionará normalmente
- DoubleTap abrirá elementos (más información a continuación)
Respecto a DoubleTap – El sitio en cuestión tiene código fuente que define cómo se manejan los clics simples y dobles para determinados elementos. Indica que un solo clic selecciona un elemento y un doble clic abre ese elemento. Tengo que ser vago con respecto a los artículos ya que no es un sitio público.
No necesito configurar particiones o swipes. Sólo estoy tratando de recrear clics de ratón de PC simple y doble clic.
EDIT: He añadido en las siguientes sugerencias de Pat. Cambié algunas cosas a mi gusto y añadí algunas de otras fuentes.
Utilicé esta pregunta para ayudar a construir mi actividad junto con la ayuda de Pat. Utilizando el código "First Way", carga mi aplicación correctamente y vuelve a cargar la página correctamente. Ahora, sólo necesito agregar los otros manejadores de eventos y configurarlos correctamente. Publicaré el código final cuando lo consiga para trabajar y marcaré la respuesta de Pat como correcta.
Este usuario está haciendo la misma pregunta sin respuesta: Cómo hacer que funcionen dos clics.
Dice que esto se deprecia GestureDetector (nuevo MyGestureDetector ()); – ¿Debo arreglar esto?
EDIT 2: Ya que la pregunta real fue cómo agregar gesturedetecor a la webview y yo era capaz de hacerlo, voy a marcar la respuesta de Pat como correcta. A pesar de que quería hacer doubleTap = doble clic, no pedí que en mi título por lo que va a crear una nueva pregunta para eso.
import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.SslErrorHandler; import android.net.http.SslError; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.GestureDetector; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; public class MainActivity extends Activity{ WebView webview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView) findViewById(R.id.webview); //Do we want/need to enable Java? webview.getSettings().setJavaScriptEnabled(true); //Here we allow for zoom controls - pinch webview.getSettings().setBuiltInZoomControls(true); //Here we remove the zoom control buttons - requires API 11 webview.getSettings().setDisplayZoomControls(false); //Here we clear the Cache and SSL Preferences webview.clearCache(true); webview.clearSslPreferences(); //Do we need to enable scroll bars to allow people to scroll left and right? webview.setHorizontalScrollBarEnabled(true); webview.setVerticalScrollBarEnabled(true); webview.setWebViewClient(new WebViewClient()); webview.loadUrl("website"); final GestureDetector gd = new GestureDetector(new MyGestureDetector()); View.OnTouchListener gl = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return gd.onTouchEvent(event); } }; webview.setOnTouchListener(gl); } class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onDoubleTapEvent(MotionEvent e) { Log.i("", "DoubleTapEvent"); return true; } } // Ignore SSL certificate errors public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } //Would like to have a Menu Button to refresh the page - or really just bring you to the login page - for use when the session times out @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(1, 1, 0, "Refresh"); //removed below to have only buttons show //getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.refresh: webview.loadUrl("website"); return true; } return super.onOptionsItemSelected(item); } }
Dan
- Fuentes hebreas de Android 2.3 en Webview
- Mostrar el teclado virtual en AlertDialog con un WebView dentro (Android)
- Selección de texto de Android en la vista web
- ¿Cuáles son los formatos de archivo en el directorio de caché de Android WebView (data_1, f_000001 etc.)?
- WebView textarea no aparece el teclado
- Vista web de Android: detección de desplazamiento
- Tamaño de fuente de Android WebView en píxeles
- Phonegap Android Internet no funciona
¿Usted está preguntando cómo fijar a un oyente para manejar grifos simples / dobles? Subclase GestureDetector.SimpleOnGestureListener y establecer que como un oyente de contacto en su:
public class GestureListener extends GestureDetector.SimpleOnGestureListener {
Y luego anular los métodos onSingleTapConfirmed para un solo toque y onDoubleTap. A continuación, establezca un oyente de contacto en su webview y onTouch simplemente llame al onTouchEvent de su GestureListener.
Editar:
final GestureDetector gestureDetector = new GestureDetector(context, new GestureListener()); webview.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } });
- Proyecto de referencia (puro java) en el proyecto de Android (No se pudo encontrar la clase)
- RuntimeException mientras utiliza ActivityUnitTestCase, pero no mientras ActivityInstrumentationTestCase2