Как найти позицию курсора для выбора текста из этой позиции в редактировать текст? - PullRequest
2 голосов
/ 09 ноября 2019

Я работаю над клавиатурой для устройств Android, где я нахожусь с такими вариантами редактирования текста, как Google Keyboard (выбор текста, копирование, вставка и т.д.). например, я набрал текст ABSCEONDER и теперь я хочу выделить некоторую часть текста. Как я хочу, чтобы выделение текста из позиции E. Что я сделал, я опустил курсор в позиции E вручную. Теперь, как мне найти позицию курсора для выбора текста из этой позиции? может ли кто-нибудь помочь?

 ExtractedText extractedText = mLatinIme.getCurrentInputConnection().getExtractedText(new ExtractedTextRequest(), 0);
                if (extractedText == null || extractedText.text == null) return;
                int index = extractedText.text.length();
                mLatinIme.getCurrentInputConnection().setSelection(0, index);

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Спасибо @mohammadReza Abiri. Я нашел решение для этого.

 ExtractedText extractedText = mLatinIme.getCurrentInputConnection().getExtractedText(new ExtractedTextRequest(), 0);
        if (extractedText == null || extractedText.text == null) return;

        int selectionStart = extractedText.selectionStart;
        int selectionEnd = extractedText.selectionEnd;

        mLatinIme.getCurrentInputConnection().setSelection(selectionStart, selectionEnd + 1);
0 голосов
/ 09 ноября 2019

Вы можете получить позицию курсора от вашего EditText, например:

editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

              int pos = editText.getSelectionStart();
              Layout layout = editText.getLayout();
              float x = layout.getPrimaryHorizontal(pos);

            }
        });
...