Получение выделенного текста в WebView через контекстную панель действий

Как известно, трудно получить выделенный текст в WebView, потому что выбор текста WebView фактически обрабатывается частным классом WebTextView .

Однако, с недавно выпущенными руководствами по Android 4.0 Design , кажется, есть проблеск надежды на достижение этого через контекстные панели действий (CAB). В нем говорится :

Используйте CAB, когда вы позволяете пользователю выбирать данные с помощью длительного нажатия. Вы можете управлять содержимым действия CAB, чтобы вставить действия, которые вы хотите, чтобы пользователь мог выполнять.

Я неверно истолковываю это? Есть ли способ получить выделенный текст из WebView через CAB?

После того, как начинается длинный щелчок и режим выбора текста, я могу определить, когда запускается ActionMode и изменяет исходное Menu копирования / вставки; Однако я не могу понять, как на самом деле получить выделенный текст.

Вы не можете сделать это с помощью текущего API.

Я подал запрос на эту функцию – Issue 24841: WebView должен разрешить приложениям создавать настраиваемую панель контекстного действия http://code.google.com/p/android/issues/detail?id=24841

В принципе, WebView в 4.0 жестко закодировал свою собственную панель контекстных действий (CAB). Эта CAB имеет ссылку на WebView и с этой ссылкой может получить выделенный текст. Я не уверен, как вы смогли обнаружить ActionMode, начиная и изменяя меню, но если бы вы смогли все это сделать, вы застряли, потому что getSelection () теперь является приватным пакетом. Я зарегистрировал это как отдельный вопрос и связал его с предыдущим выпуском выше.

Вы можете использовать javascript для получения выделенного текста: window.getSelection () и использовать функцию addJavascriptInterface WebView для возврата результата.

Спасибо за вашу информацию, я решил сложную проблему. Я просто хочу добавить некоторую функцию в actionmode. Ниже мой код, может быть полезным для других.

 @Override public ActionMode onWindowStartingActionMode(Callback callback) { // TODO Auto-generated method stub ActionMode mode = super.onWindowStartingActionMode(callback); mode.getMenuInflater().inflate(R.menu.actions, mode.getMenu()); mode.getMenu().findItem(R.id.action_add).setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { // TODO Auto-generated method stub Log.i("", "onMenuItemClick add "); return false; } }); return mode; }