Как включить меню выделения по умолчанию в Android webview?

#java #android

#java #Android

Вопрос:

Как включить меню выделения текста по умолчанию, например: Копировать / Вставить / Поиск / Поделиться в Android webview?

введите описание изображения здесь

Ответ №1:

Работая на Android 1.5 — 2.3, вы можете использовать emulateShiftHeld() общедоступный начиная с 2.2, но теперь он устарел. этот метод переводит ваш WebView в режим выделения текста.

https://developer.android.com/reference/android/webkit/WebView.html#emulateShiftHeld()

К сожалению, в Android нет встроенной функции копирования / вставки / поиска / обмена, начиная с Android 2.0, выделение текста можно управлять прикосновением, но, кроме этого, вы больше ничего не можете сделать.

Комментарии:

1. Какие-либо материалы, связанные с javascript, вы можете предложить для этого?

2. @Drax Вопрос был помечен неправильно. WebView это класс Java , а Java != JavaScript (и нет «javascript»). Тем не менее, вы можете попытаться эмулировать это в документе, отображаемом с помощью скриптов WebView с DOM, используя события касания.

Ответ №2:

Я нашел обходной путь для этого метода проверки selectText() в WebView (его нет в API, но его можно вызвать с помощью отражения)

вот мой полный исходный код метода:

  public void startTextSelection() {
        try {
            WebView.class.getMethod("selectText").invoke(this);
        } catch (Exception e) {
            try {
                WebView.class.getMethod("emulateShiftHeld").invoke(this);
            } catch (Exception e1) {
                KeyEvent shiftPressEvent = new KeyEvent(0, 0,
                        KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0);
                shiftPressEvent.dispatch(this);
                Toast.makeText(getContext(), R.string.select_text, Toast.LENGTH_LONG).show();
            }
        }
    }
  

Работает и на микросхемах.

Комментарии:

1. Я использовал приведенный выше код, но, к сожалению, selectText был полностью удален из Android 4.1 (Jellybean), так что это больше не будет работать. Есть предложения по 4.1?

2. @Martin ну, мне придется заглянуть в исходный код 4.1, я свяжусь с вами, как только найду решение 🙂

3. После анализа android. webkit. WebViewClassic, с которым я добился некоторого успеха:

4. После анализа android. webkit. WebViewClassic Я добился некоторого успеха со следующим: KeyEvent enterEvent = новый KeyEvent(0,0, KeyEvent. ACTION_DOWN, KeyEvent. KEYCODE_ENTER,0,0); enterEvent.dispatch(this); но может потребоваться больше, так как мне нужно немного прокрутить веб-просмотр вниз, прежде чем все это сработает.

5. @Martin я думаю, что будет какой-то метод, который делает это, у меня нет времени изучать исходный код, но я изучу его как можно скорее 😉

Ответ №3:

Попробуйте это:

  mWebView.setHapticFeedbackEnabled(true);
 mWebView.setLongClickable(true);