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

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.

Это варианты, которые я вижу, надеюсь, моя близость и разочарование с этим ослепили меня до простого (читайте, как встроенный) решение или два.

Еще раз спасибо за ваше время.

4b9b3361

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