Android: отключить выбор текста в веб-просмотре
Я использую webview, чтобы представить некоторые форматированные вещи в моем приложении. Для некоторого взаимодействия (которое специфично для некоторых элементов dom) я использую javascript и WebView.addJavascriptInterface()
. Теперь я хочу признать длинное прикосновение. К сожалению, onLongTouch
, в Android 2.3 отображаются ручки для выбора текста.
Как отключить этот выбор текста без установки onTouchListener
и вернуть значение true? (Затем взаимодействие с "веб-сайтом" больше не работает.
Ответы
Ответ 1
Я понял! Вот как вы можете реализовать свой собственный longtouchlistener. В функции longTouch вы можете сделать вызов вашего 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!
}
Это работает.
Ответ 2
Это сработало для меня
mWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
mWebView.setLongClickable(false);
Я не проверял, если вы не хотите вибрации, вызванные длинным щелчком, вы можете попробовать это:
mWebView.setHapticFeedbackEnabled(false);
Ответ 3
Настройка свойства webkit css -webkit-user-select
до none
решит проблему.
Пример CSS для отключения выбора:
* {
-webkit-user-select: none;
}
Ответ 4
Похоже, что вырезать/вставить с помощью длительного нажатия выключается, если вы использовали
articleView.setWebChromeClient(new WebChromeClient(){...})
См. https://bugzilla.wikimedia.org/show_bug.cgi?id=31484
Итак, если вы используете setChromeClient, и у вас есть длинный клик для начала копирования/вставки, выполните следующие действия:
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();
}
});
Ответ 5
Кажется, что единственный вариант - установить onTouchListener
и написать свой собственный код, чтобы обнаружить длинный щелчок. Затем верните true
, если это длинный щелчок и false
в противном случае.
Ответ 6
Альтернативное решение заключается в создании подкласса WebView и Override executeLongClick, как показано ниже:
public class AdvanceWebView extends WebView {
//Add constructors...
@Override
public boolean performLongClick() {
return true;
}
}