Выбор текста в зависимости от телефона - PullRequest
2 голосов
/ 12 февраля 2020

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

Как я могу установить поведение, подобное первому, по умолчанию? И почему поведение телефонов отличается?

Спасибо за ваши ответы, хорошего дня!

РЕДАКТИРОВАТЬ:

Теперь я выбираю слово, которое содержит курсор с помощью этого метода:

fun EditText.selectCurrentWord() {
    val textSpan = text
    val selection = selectionStart
    val pattern = Pattern.compile("\\w+")
    val matcher = pattern.matcher(textSpan)
    var start: Int
    var end: Int

    while (matcher.find()) {
        start = matcher.start()
        end = matcher.end()

        if (selection in start..end) {
            setSelection(start, end)
            break
        }
    }
}

Но теперь проблема в том, что курсоры в начале и в конце выделения не появляются ...

EditText выбирается и isCursorVisible имеет значение true.

1 Ответ

2 голосов
/ 17 февраля 2020

Вы можете попробовать с помощью Button выбрать текст с помощью

EditText myET = findViewById(R.id.myET);
Button selectBtn = findViewById(R.id.selectBtn);

selectBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        myET.setSelectAllOnFocus(true);
        myET.selectAll();    
    }
});

Вы можете открыть context menu с помощью

openContextMenu(myET);

Вы также можете получить позицию начала и конечная точка курсора

myET.getSelectionStart();
myET.getSelectionEnd();

Ссылающиеся ответы

  1. Получение позиции курсора

  2. Выберите Текст программно

Обновление 1

Добавьте это в ваш щелчок кнопки, это работает, но иногда вам нужно нажать 2 раза, чтобы настроить это

myET.performLongClick();
myET.setSelection(0, myET.length());

Надеюсь, это поможет!

...