Получение выделенного текста в WebView через контекстную панель действий - PullRequest
5 голосов
/ 13 января 2012

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

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 28 января 2012

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

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

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

0 голосов
/ 04 марта 2014

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

@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;
}
0 голосов
/ 06 февраля 2012

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

...