Android EditText Автофокус на следующий EditText при максимальной длине - PullRequest
11 голосов
/ 30 ноября 2011

У меня есть имя пользователя и пароль. Сегмент 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 методе, в котором я обрабатываю свою регистрационную информацию.Любые идеи или предложения будут оценены.

Ответы [ 5 ]

1 голос
/ 06 декабря 2013

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

/ ** 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) {
   }
});
0 голосов
/ 29 апреля 2018

Удалить nextfocusdown из вашего редактируемого текста xml.

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 (usr.getText.toString().length() == 9) (Use usr.getText.toString() instead of s) 
        { 
            pswd.requestFocus(); 
        }
    }
    @Override
    public void afterTextChanged(Editable arg0) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start,
        int count, int after) {
    }
});
0 голосов
/ 15 мая 2014

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

0 голосов
/ 13 сентября 2013

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

0 голосов
/ 02 декабря 2011

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

...