Android 3.x ТОЛЬКО выбор текста WebView + JavaScript
Проблемный домен: читатель формата ePub на базе Android WebView -
Нам нужны текстовые блики, которые доступны с помощью методов JavaScript (т.е. включить em, отключить их, сохранить их по электронной почте и т.д.)
Любой, кто знает, пожалуйста, исправьте меня, если я ошибаюсь:
Во время выбора текста в WebView -
В основном нам вручается наложение TextView (WebTextView), которое НЕ НАХОДИТ, прикрепленное к базовому html, отличному от визуально (хорошая работа по выравниванию всего и делает его бесшовным, btw), на котором мы выполняем TextSelectionActionMode и ClipboardManager поставляется с результатами... чтобы сделать это ясно, фактический HTML с WebView IS фактически не выбран в любое время во время этого процесса запаса, поэтому JavaScript не может получить доступ к результатам действия.
Итак, чтобы это поведение работало в версии 3.1+, у меня есть несколько возможных планов по реализации моего собственного выбора в WebView - это та часть, где мне интересно, не могу ли я видеть из своего угла:) -
1) зафиксировать MOTION_DOWN длинного клика, который инициирует режим выбора, переопределить встроенный TextSelection ActionMode (чтобы доказать брендинг клиентов - то, как я нашел, настолько хакерское, что это больно), наблюдайте за перетаскиванием, зафиксируйте позицию MOTION_UP, нарисуйте эти коорды на
WebView, и сделайте мой выбор на основе координат (при сравнении текста с тем, который был захвачен ClipboardManager)
2) создайте свой собственный "WebTextView" (весь lotta work lol) и не так хакерски создайте мой собственный ActionMode и сделайте все вышеперечисленное.
3) используйте MotionEvents, сгенерированные в процессе выбора запаса, и каким-то образом переопределите созданный этим способом ActionSclection TextSelection.
Это варианты, которые я вижу, надеюсь, моя близость и разочарование
с этим ослепили меня до простого (читайте, как встроенный)
решение или два.
Еще раз спасибо за ваше время.
Ответы
Ответ 1
Я получил эту работу в 2.2 - 4.0.3. Я использовал интерфейс javascript и передал ему все штрихи. Решение похоже работает очень хорошо, и я привел пример проекта на github. Проект github включает в себя необходимые js в папке с ресурсами, а также тестовую страницу и веб-представление, которое загружает тестовую страницу и реализует все необходимые методы для обработки выбора. Ссылка на проект github https://github.com/btate/BTAndroidWebViewSelection. Имейте это в виду.
Ответ 2
Я не уверен на 100%, какие методы/свойства дают вам диапазон и выбор. Я не видел в документации. Но я смог получить выбранный диапазон в пикселях с помощью отражения. Не уверен, что это кому-то помогает, но подумал, что стоит разместить здесь.
Region result = null;
try {
Object[] params = null;
Method nativeGetSelectionRegion = WebView.class.getDeclaredMethod("nativeGetSelectionRegion");
nativeGetSelectionRegion.setAccessible(true);
result = (Region)nativeGetSelectionRegion.invoke(this, params);
Log.i(TAG, "res: region " + result.getBounds().toShortString());
} catch (Exception e) {
e.printStackTrace();
}
Надеюсь, что кто-то поможет
EDIT: это не работает на 3.1 +