Android EditText AutoFocus в следующий EditText, когда на maxlength

У меня есть имя пользователя и сегмент XML-пароля

<EditText 
    android:id="@+id/username"
    android:hint="@string/username_hint"
    android:layout_width="match_parent"
    android:maxLength="9"
    android:nextFocusDown="@+id/pswd"
    android:layout_height="wrap_content">
</EditText>
<EditText 
    android:inputType="textPassword" 
    android:hint="@string/password_hint"
    android:id="@+id/pswd" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content">
</EditText>

Я хочу, когда поле имени пользователя достигнет 9-го символа для фокусировки курсора, чтобы автоматически перейти в поле пароля

Я смотрел Фокус следующего текста автоматически и пытался:

 final EditText usr = (EditText) findViewById (R.id.username);
 final EditText pswd = (EditText) findViewById (R.id.pswd);
 usr.addTextChangedListener(new TextWatcher() 
 {
public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
      if (s.length() == 9) 
       { 
           pswd.requestFocus(); 
       }
     }
    @Override
    public void afterTextChanged(Editable arg0) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start,
            int count, int after) {
    }
});

Не большой успех. Я использую это в моем методе oncreate, в котором я обрабатываю свою регистрационную информацию. Любые идеи или предложения будут оценены.

Ответ 1

попробуйте, как это может вам помочь.

/** addTextChangedListener полезен, когда заполняется поле первого имени пользователя до 9-го символа        * запрос автоматически сфокусируется на следующем поле */

    usr.addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence s, int start, int before, int count) { 
             if (count == 9) { 
                 pwd.requestFocus(); 
                 usr.setTransformationMethod(PasswordTransformationMethod.getInstance());
             }
        }
       @Override
       public void afterTextChanged(Editable arg0) {
       }
       @Override
       public void beforeTextChanged(CharSequence s, int start,
               int count, int after) {
       }
   });

Ответ 2

Распечатайте "s" с помощью log.d() или что-то еще, чтобы вы могли видеть, как выглядит "s".
Возможно, это не так, как вы ожидаете.
В этом случае вы можете code it dirty.
Создайте свой собственный TextWatcher, который реализует TextWatcher и даст в конструкторе "usr".
чтобы вы могли получить общую длину с помощью usr.getText()

Ответ 3

Привет, я попробовал прямо сейчас, но я успел, наш код такой же, мой xml прост только два editText мой телефон Meizu версии 4.1

Ответ 4

Попробуйте сделать это по методу afterTextChanged. также вы можете вызвать usr.clearFocus(), прежде чем запрашивать фокус на pwd.