2016-11-10 3 views
2

В моей службе метода ввода я пытаюсь выбрать текст перед текущей позицией курсора. Ниже приведен фрагмент кодаВыбор с помощью Android IME

  InputConnection inputConnection = getCurrentInputConnection(); 
      ExtractedText extractedText = inputConnection.getExtractedText(new ExtractedTextRequest(), 0); 
      inputConnection.setSelection(extractedText.selectionStart-1,extractedText.selectionEnd); 

      InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputMethodManager.updateSelection(null, extractedText.selectionStart-1,extractedText.selectionEnd, 0, 0); 

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

Может ли кто-нибудь указать, что я делаю неправильно?

Сложение:

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

Но это не работает ... Опять же, что я делаю неправильно?

ответ

0

Я решил эту проблему, используя клавиши shift +.

1 --> I was requesting the "inputConnection" for each event. I have now started using just one instance of inputConnection which I request for on the hook "onBindInput" and use it for all. 
2 --> Sending Meta_shift_on as a flag along with the dpad_left/right/whatever was not enough, Now I send a press down shift event, then dpad up-down, and then up shift event. following is the pseudo-code: 


private void moveSelection(int dpad_keyCode) { 
inputMethodService.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, 0); 
inputMethodService.sendDownAndUpKeyEvent(dpad_keyCode, 0); 
inputMethodService.sendUpKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT, 0); 
} 

И это все, что нужно.

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

Смежные вопросы