Поместите курсор в конец текста в EditText
Я keyListener
значение EditText
на keyListener
.
Но когда я меняю текст, курсор перемещается в начало EditText
. Мне нужно, чтобы курсор находился в конце текста.
Как переместить курсор в конец текста в EditText
.
- Ключевые привязки и ключевые слушатели в Java
- Как использовать KeyListener
- Как KeyListener обнаруживает комбинации клавиш (например, ALT + 1 + 1)
- addKeyListener () не работает для JPanel
- Keylistener не работает для JPanel
- Как написать ключевой прослушиватель для отслеживания всех нажатий клавиш на Java?
- KeyListener, keyPressed или keyTyped
- Слушатель событий на Java без приложения фокуса? (Глобальное обнаружение нажатия клавиш)
- java keylistener не вызван
- Позволяя клавише «Ввод» нажать кнопку «Отправить», в отличие от использования только MouseClick
- Как я могу прослушивать нажатия клавиш (внутри Java Swing) для всех компонентов?
- Swing KeyListener и несколько нажатых клавиш одновременно
- Как написать KeyListener для JavaFX
Попробуй это:
EditText et = (EditText)findViewById(R.id.inbox); et.setSelection(et.getText().length());
Существует функция append для ediitext, которая добавляет строковое значение к текущему значению edittext и помещает курсор в конец значения. Вы можете иметь строковое значение как текущее значение ediitext и вызвать append ();
myedittext.append("current_this_edittext_string");
Котлин :
установите курсор в исходное положение :
val editText = findViewById(R.id.edittext_id) as EditText editText.setSelection(0)
установите курсор в конец EditText :
val editText = findViewById(R.id.edittext_id) as EditText editText.setSelection(editText.getText().length())
Ниже код должен поместить курсор после второго символа:
val editText = findViewById(R.id.edittext_id) as EditText editText.setSelection(2)
JAVA :
установите курсор в исходное положение :
EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(0);
установите курсор в конец EditText :
EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(editText.getText().length());
Ниже код должен поместить курсор после второго символа:
EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(2);
Если вы вызвали setText
раньше, и новый текст не получил макет фазового вызова setSelection
в отдельной runnable, запущенной View.post(Runnable)
(repost из этого View.post(Runnable)
).
Итак, для меня этот код работает:
editText.setText("text"); editText.post(new Runnable() { @Override public void run() { registerPhone.setSelection("text".length()); } });
Вы также можете поместить курсор в конец текста в виде EditText
следующим образом:
EditText et = (EditText)findViewById(R.id.textview); int textLength = et.getText().length(); et.setSelection(textLength, textLength);
editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { editText.setSelection(editText.getText().length()); return false; } });
Это еще одно возможное решение:
et.append("");
Просто попробуйте это решение, если оно не работает по какой-либо причине:
et.setSelection(et.getText().length());
Вы должны быть в состоянии достичь этого с помощью метода EditText setSelection (), см. Здесь
Я думаю, что это может достичь того, чего вы хотите.
Editable etext = mSubjectTextEditor.getText(); Selection.setSelection(etext, etext.length());
/** * Set cursor to end of text in edittext when user clicks Next on Keyboard. */ View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { if (b) { ((EditText) view).setSelection(((EditText) view).getText().length()); } } }; mEditFirstName.setOnFocusChangeListener(onFocusChangeListener); mEditLastName.setOnFocusChangeListener(onFocusChangeListener);
Это хорошо для меня!
Если ваш EditText не ясен:
editText.setText(""); editText.append("New text");
Все остальные коды, которые я тестировал, не работали хорошо из-за того, что пользователь все равно мог поместить курсор / курсор где-нибудь в середине строки (например: 12 | 3.00 – где | – это курсор). Мое решение всегда помещает курсор в конец строки всякий раз, когда происходит касание в EditText.
Конечным решением является:
// For a EditText like:
@ string / amount = “0.00” @ string / zero_value = “0.00”
// Create a Static boolean flag private static boolean returnNext; // Set caret/cursor to the end on focus change EditTextAmount.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View editText, boolean hasFocus) { if(hasFocus){ ((EditText) editText).setSelection(((EditText) editText).getText().length()); } } }); // Create a touch listener and put caret to the end (no matter where the user touched in the middle of the string) EditTextAmount.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View editText, MotionEvent event) { ((EditText) editText).onTouchEvent(event); ((EditText) editText).setSelection(((EditText) editText).getText().length()); return true; } }); // Implement a Currency Mask with addTextChangedListener EditTextAmount.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String input = s.toString(); String output = new String(); String buffer = new String(); String decimals = new String(); String numbers = Integer.toString(Integer.parseInt(input.replaceAll("[^0-9]", ""))); if(returnNext){ returnNext = false; return; } returnNext = true; if (numbers.equals("0")){ output += "0.00"; } else if (numbers.length() <= 2){ output += "0." + String.format("%02d", Integer.parseInt(numbers)); } else if(numbers.length() >= 3){ decimals = numbers.substring(numbers.length() - 2); int commaCounter = 0; for(int i=numbers.length()-3; i>=0; i--){ if(commaCounter == 3){ buffer += ","; commaCounter = 0; } buffer += numbers.charAt(i); commaCounter++; } output = new StringBuilder(buffer).reverse().toString() + "." + decimals; } EditTextAmount.setText(output); EditTextAmount.setSelection(EditTextAmount.getText().length()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { /*String input = s.toString(); if(input.equals("0.0")){ EditTextAmount.setText("0.00"); EditTextAmount.setSelection(EditTextAmount.getText().length()); return; }*/ } @Override public void afterTextChanged(Editable s) { } });
Надеюсь, поможет!
Это работает
Editable etext = edittext.getText(); Selection.setSelection(etext,edittext.getText().toString().length());
Вопрос старый и ответил, но я думаю, может быть полезно иметь этот ответ, если вы хотите использовать недавно выпущенные инструменты DataBinding для Android, просто установите это в свой XML:
...
Это делает трюк безопасно :
editText.setText(""); if (!TextUtils.isEmpty(text)) { editText.append(text); }
Если вы хотите выбрать весь текст и просто ввести новый текст вместо старого, вы можете использовать
android:selectAllOnFocus="true"
похоже на ответ @Anh Duy, но он не работал для меня. Я также нуждался в том, чтобы курсор переместился в конец только тогда, когда пользователь удаляет текст редактирования и по-прежнему может выбрать положение курсора после этого, это единственный код, который сработал для меня
boolean textFocus = false; //define somewhere globally in the class //in onFinishInflate() or somewhere editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { editText.onTouchEvent(event); if(!textFocus) { editText.setSelection(editText.getText().length()); textFocus = true; } return true; } }); editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { textFocus = false; } });
editText.setSelection
– это волшебство здесь. В основном выбор дает вам место курсора в любой позиции, которую вы хотите.
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length());
Это помещает курсор в конец EditText. В основном editText.getText().length()
дает вам длину текста. Затем вы используете setSelection
с длиной.
editText.setSelection(0);
Он предназначен для установки курсора в исходное положение (0).
Hello Try This
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point
курсор
public class CustomEditText extends EditText { public CustomEditText(Context context, AttributeSet attrs) { super(context, attrs); } public CustomEditText(Context context) { super(context); } public CustomEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); this.setSelection(this.getText().length()); } @Override protected void onSelectionChanged(int selStart, int selEnd) { } }
Пользователь этот CustomEditText в вашем XML-файле, это сработает. Я тестировал это, и он работает для меня.