Подтвердить что ты не робот

Android: отключить выбор текста в веб-просмотре

Я использую webview, чтобы представить некоторые форматированные вещи в моем приложении. Для некоторого взаимодействия (которое специфично для некоторых элементов dom) я использую javascript и WebView.addJavascriptInterface(). Теперь я хочу признать длинное прикосновение. К сожалению, onLongTouch, в Android 2.3 отображаются ручки для выбора текста.

Как отключить этот выбор текста без установки onTouchListener и вернуть значение true? (Затем взаимодействие с "веб-сайтом" больше не работает.

4b9b3361

Ответ 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;
   }
}