Как программно запустить контекстную панель действий для просмотра текста с копиями опций по умолчанию и выбрать все?

Есть ли способ программно запустить контекстную панель действий, связанную с представлением текста, одним нажатием кнопки? Он также должен содержать опции по умолчанию для копирования/выбора всех. По сути, я хочу показать маркеры выбора в моем текстовом представлении и вариант копирования/выбора всех по умолчанию для Android на панели действий одним нажатием кнопки (вместо долгого нажатия/двойного нажатия).

То, что я пробовал до сих пор: попытался использовать setCustomActionModeCallback() api, но проблема здесь в том, что пользователю нужно долго нажимать/дважды щелкать текстовое представление для появления CAB. Пробовал использовать startActionMode() api, но не смог найти способ сохранить элементы по умолчанию... он просто открывает новый пустой CAB файл. Я знаю, я могу добавить свой собственный код copy-select all code и использовать этот пустой CAB, но Я хочу использовать Android по умолчанию вместо того, чтобы управлять им самостоятельно.

Редактировать; Я не могу использовать EditText. Представление должно быть только TextView, и длинный щелчок будет отключен. Я делаю все вышеперечисленные изменения, устанавливая TextView как выбираемый

Ответ 1

Выберите текст вручную, а затем выполните длинный щелчок:

textView.post(new Runnable() {
    @Override
    public void run() {
        Selection.selectAll((Spannable) tv.getText());
        tv.performLongClick();
    }
});

Edit:

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

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

Простым решением было бы жить с тем, что у вас есть, и использовать мой предложенный выше метод. Если вы хотите избежать вызова своего длинного кликера, вы можете удалить его во время вызова кабины:

Selection.selectAll((Spannable) tv.getText());
tv.setOnLongClickListener(null);
tv.performLongClick();
tv.setOnLongClickListener(mLongClickListener);

Ответ 2

если вы хотите выбрать текст в текстовом представлении, чем есть несколько подходов, за которыми вы можете следовать. Первое, что вы можете сделать, - установить свойства xml TextView.

  android:textIsSelectable = "true"

 txtView.setTextIsSelectable(true)

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

или

android:selectAllOnFocus = true;
setSelectAllOnFocus(boolean)

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

для более подробного изучения вы можете ссылаться на эту ссылку. вы найдете всю свою необходимую задачу. http://developer.android.com/reference/android/widget/TextView.html[http://developer.android.com/reference/android/widget/TextView.html][1]

Благодарю вас