#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);