Положение курсора в не редактируемом 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) {
}
});