В моем приложении, когда пользователи нажимают или касаются вида "Редактировать текст", фокус иногда устанавливается на начало. Например, если существующий текст "Привет". Пользователи хотят нажать на нее и изменить ее на "H1. Как дела?" добавив текст "Как дела?". Но так как фокус в начале, он становится "Как вы? Привет". Поэтому я всегда хочу настроить фокусировку на правую часть текста при выборе. Как мне это сделать. Пожалуйста, дайте мне знать, если возможно, образец. Спасибо за ваше время и помощь.
Как настроить фокус на право текста в EditText для Android?
Ответ 1
Вы можете явно вставить каретку в последнюю позицию в тексте:
EditText editText = (EditText) findViewById(R.id.textId);
int pos = editText.getText().length();
editText.setSelection(pos);
Ответ 2
Что-то более конкретное в том, что вы спрашиваете, вы можете использовать следующий код:
EditText editText = (EditText) findViewById(R.id.textId);
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
editText.setSelection(editText.getText().length());
}
}
});
метод setOnFocusChangeLister() используется для обнаружения, когда editText получает фокус.
Ответ 3
Выше решение не работает.
Здесь я даю вам новое решение для установки фокуса справа от текста в edittext для android. И его работа прекрасна.
Мой код:
EditText edt_ans = (EditText)findViewById(R.id.edt_answer);
edt_ans.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// TODO Auto-generated method stub
edt_ans.setSelection(edt_ans.getText().length());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after)
{
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s)
{
// TODO Auto-generated method stub
}
});
Счастливое кодирование....:)
Ответ 4
setSelection не работал у меня, но это работает как шарм. Работает также с afterTextChanged.
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
edittext.requestFocus(edittext.getText().length());
}
Ответ 5
Более заметным способом будет то, что вам не нужно постоянно настраивать выбор вручную. Так используйте CustomEditText вместо EditText в вашем макете.
public class CustomEditText extends EditText {
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* This is a Fix of buggy behavior of android, where after setting text using setText(...), selection remain on
* first character and not at last character.
*/
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text, type);
if (text != null && ! (text.toString().trim().length() == 0 )) {
final int textLength = text.length();
if (getSelectionEnd() != textLength) {
setSelection(textLength);
}
}
}
}
Ответ 6
В новом api u можно использовать что-то вроде этого:
//buttons setups
private void buttonsSetupForRecommendations() {
button2.setNextFocusRightId(R.id.ok_button);
button2.setNextFocusLeftId(R.id.ok_button);
button2.setNextFocusDownId(R.id.cancel_button);
button2.setNextFocusUpId(R.id.cancel_button);
button.setVisibility(View.GONE);
button2.setText(R.string.cancel_text);
button1.setText(R.string.clear_text);
button1.setNextFocusRightId(R.id.cancel_button);
button1.setNextFocusLeftId(R.id.cancel_button);
button1.setNextFocusUpId(R.id.ok_button);
button1.setNextFocusDownId(R.id.ok_button);
button1.requestFocus();
}
эта работа с кнопкой и другими элементами. U может добавить это в java-код ^^ или xml
Ответ 7
public void ontextchangelistner(){
if(s.toString().startsWith("0")) {
if (s.length() == 2) {
if (s.toString().contains("00")) {
editText.setText(s.toString().substring(1));
int pos = editText.getText().length();
editText.setSelection(pos);
}
}
}
Если вы вводите первый ноль в текстовом редакторе, он показывает; но во второй раз при нажатии нуля этот ноль не отображается. Надеюсь, это поможет вам.
Ответ 8
Внутри addTextChangedListener()
:
@Override
public void afterTextChanged(Editable editable) {
viewHolder.editText.setSelection(viewHolder.editText.getText().length()); //set cursor to the end
}