Положение курсора в не редактируемом EditText в приложении Android

Я читал ответы из поста Как установить позицию курсора в EditText? У меня есть конкретная проблема в моем EditText, которая может быть причиной проблемы. В моем XML-макете я определяю EditText с именем "edit", у которого inputType = none. Согласно документам разработчика Android, если inputType = нет, текст не редактируется. Причина, по которой "none" вызвана, заключается в том, что я предотвращаю всплывающую общую клавиатуру Android через мой пользовательский интерфейс, который работает очень хорошо. Я хочу сделать что-то вроде этого: пользователь ввел: 5 + sin(), теперь позиция курсора editText курсора должна быть сразу после символа), но курсор не отображается, так как inputType = none. Что мне нужно сделать, это переместить положение, в котором следующий текстовый ввод будет помещен между символами (). То, что происходит, - то, что следующий ввод текста идет сразу после символа). Поэтому, если следующий текстовый ввод 4, то: 5 + sin()4, я не хочу этого. Я предпочитаю следующее: 5 + грех (4)

Я использую изготовленную на заказ клавиатуру с кнопкой "()". Вот что я пытался без успеха:

//once the user presses the "( )" button:
Selection.setSelection(edit.getText(),edit.getText().length() - 2);

Еще один способ, которым я пытался:

//once the user presses the "( )" button:
edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setSelection(edit.getText().length() - 2);
edit.setInputType(InputType.TYPE_NULL);

Ни один из двух способов не сработал для меня. Я также попытался установить для inputType editText что-то еще, кроме "none" в файле XML. Но клавиатура андроида выскакивает поверх моей изготовленной на заказ клавиатуры.

Любые мысли или идеи будут полезны

1 ответ

Я не знаю, как именно работает ваша кнопка (), но вы можете попробовать эту.

yourEditText.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) {

            if( s.length()>0 && s.charAt(s.length()-1) == ')' ){
            yourEditText.setSelection(s.length()-1);
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
Другие вопросы по тегам