Android 3.x ТОЛЬКО выбор текста WebView + JavaScript

Проблемный домен: читатель формата ePub на базе Android WebView –

Нам нужны текстовые блики, которые доступны с помощью методов JavaScript (т. Е. Включите их, отключите их, сохраните их по электронной почте и т. Д.),

Любой, кто знает, пожалуйста, поправьте меня, если я ошибаюсь: во время выбора текста в 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, сгенерированные в процессе выбора запаса, и каким-то образом переопределите действие TextSelection ActionMode, вызванное этим.

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

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

Я получил эту работу в 2.2 – 4.0.3. Я использовал интерфейс javascript и передал ему все штрихи. Решение похоже работает очень хорошо, и я привел пример проекта на github. Проект github включает в себя необходимые js в папке с ресурсами, а также тестовую страницу и веб-представление, которое загружает тестовую страницу и реализует все необходимые методы для обработки выбора. Ссылка на проект github – https://github.com/btate/BTAndroidWebViewSelection . Имейте это.

Я не уверен на 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+