Как установить фокус справа от текста в EditText для Android? - PullRequest
15 голосов
/ 30 июня 2011

В моем приложении, когда пользователи щелкают или касаются в представлении «Редактировать текст», фокус иногда устанавливается на начало.Например, если существующий текст «Привет».Пользователи хотят нажать на него и изменить его на «H1 Как дела?»добавив текст «Как дела?».Но так как фокус находится в начале, он становится "Как дела? Привет".Поэтому я всегда хочу, чтобы при фокусировке текст был направлен вправо.Как мне это сделать.Пожалуйста, дайте мне знать, если возможно.Спасибо за ваше время и помощь.

Ответы [ 7 ]

42 голосов
/ 30 июня 2011

Вы можете явно поставить каретку на последнюю позицию в тексте:

EditText editText = (EditText) findViewById(R.id.textId);
int pos = editText.getText().length();
editText.setSelection(pos);
6 голосов
/ 18 июня 2013

Что-то более конкретное в том, что вы спрашиваете, вы можете использовать следующий код:

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 получает фокус.

0 голосов
/ 01 апреля 2017
   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);
            }
        }
   }

Если вы вводите нулевой первый раз в тексте редактирования, он показывает;но при втором нажатии на ноль этот ноль не отображается.Я надеюсь, что это поможет вам.

0 голосов
/ 26 июля 2016

На новом API вы можете использовать что-то вроде этого:

 //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();
}

это работа с кнопкой и другими предметами. Вы можете добавить это на Java-коде ^^ или xml

0 голосов
/ 14 марта 2016

setSelection не работал для меня, но это работает как шарм. Работает и на afterTextChanged.

      @Override
      public void onTextChanged(CharSequence s, int start, int before, int count) 
      {
          edittext.requestFocus(edittext.getText().length());
      }
0 голосов
/ 05 сентября 2014

Более заметным способом было бы, когда вам не нужно постоянно заботиться о настройке выбора вручную. Поэтому используйте 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);
            }
        }
    }

}
0 голосов
/ 05 июля 2013

Над решением не работает.

Здесь я даю вам новое решение для установки фокуса справа от текста в 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

          }
   });

Happy Coding ....:)

...