Android: deshabilita la selección de texto en una vista web
Estoy usando una webview para presentar algunas cosas con formato en mi aplicación. Para alguna interacción (que son específicos de ciertos elementos dom) uso javascript y WebView.addJavascriptInterface()
. Ahora, quiero reconocer un toque largo. Desafortunadamente, onLongTouch
, en Android 2.3 se muestran las manijas para la selección de texto.
¿Cómo puedo desactivar esta selección de texto sin establecer el onTouchListener
y devolver true? (Entonces, la interacción con el "sitio web" ya no funciona.
- Caída de la aplicación en Android 5.0.x
- Webview shouldinterceptrequest ejemplo
- Android WebView Inyectar Javascript antes de html cargado
- Android WebView: Determine <a> target = "_ blank"
- Deshabilitar SoftKeyboard dentro de un WebView
Saludos y gracias de antemano, Jan Oliver Oelerich
- Webview no puede cargar archivo html desde la tarjeta sd
- ¿Desactivar la autosugestión en WebView?
- Cómo arreglar "Falta un arrastre mientras esperamos la respuesta de WebCore para tocar hacia abajo"
- Rendimiento de Android WebView
- Tocar el campo de formulario en WebView no muestra el teclado virtual
- ¿Puedo pasar un objeto Javascript a una WebView de Android?
- Diferentes anchos y alturas de DisplayMetrics y $ (window) .width () en WebView
- La mejor manera de interceptar una solicitud de WebView en Android
Esto funcionó para mí
mWebView.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { return true; } }); mWebView.setLongClickable(false);
No he probado, si usted no desea la vibración causada por el tecleo largo, usted puede intentar esto.
mWebView.setHapticFeedbackEnabled(false);
Configurar la propiedad css de webkit -webkit-user-select
a none
resolvería el problema.
Ejemplo CSS para desactivar la selección:
* { -webkit-user-select: none; }
¡¡Me lo imaginé!! Así es como puede implementar su propio lector de larga duración. En la función longTouch puede hacer una llamada a su interfaz javascript.
var touching = null; $('selector').each(function() { this.addEventListener("touchstart", function(e) { e.preventDefault(); touching = window.setTimeout(longTouch, 500, true); }, false); this.addEventListener("touchend", function(e) { e.preventDefault(); window.clearTimeout(touching); }, false); }); function longTouch(e) { // do something! }
Esto funciona.
Parece que cortar / pegar a través de la prensa larga se apaga si se utiliza
articleView.setWebChromeClient(new WebChromeClient(){...})
Consulte https://bugzilla.wikimedia.org/show_bug.cgi?id=31484
Así que si está usando setChromeClient y QUIERE tener clic largo para iniciar copiar / pegar, haga lo siguiente:
webView.setWebChromeClient(new WebChromeClient(){ [.... other overrides....] // @Override // https://bugzilla.wikimedia.org/show_bug.cgi?id=31484 // If you DO NOT want to start selection by long click, // the remove this function // (All this is undocumented stuff...) public void onSelectionStart(WebView view) { // By default we cancel the selection again, thus disabling // text selection unless the chrome client supports it. // view.notifySelectDialogDismissed(); } });
Parece que la única opción es establecer onTouchListener
y escribir su propio código para detectar un clic largo. A continuación, devuelve true
si es un clic largo y false
caso contrario.