с 1-го текста редактирования происходит на 2-й текст редактирования, маска ввода не работает - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть 6 правочных текстов (будет использоваться для OTP)
Каждый текст правки будет разрешать только 1 символ и затем будет переведен в другой текст правки

Вот пример кода:

et1.requestFocus()

et1.addTextChangedListener(new TextWatcher() {

public void onTextChanged(CharSequence s, int start,int before, int count {
    if(et1.getText().toString().length()==size){
        et2.requestFocus();
    }
}
public void beforeTextChanged(CharSequence s, int start,
                int count, int after) {}

public void afterTextChanged(Editable s) {
     et1.setTransformationMethod(new PasswordTransformationMethod());
}

});

Что происходит, et1 не маскирует себя как точка / звездочка, но фокус переносится на et2.
Но всякий раз, когда я нажимаю на него снова, он маскируется.

Редактировать: уже добавлен inputType = "numberPassword" в мой XML, но все еще не работает

1 Ответ

0 голосов
/ 22 ноября 2018

попробуйте этот способ

xml

<LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:orientation="horizontal">

                <EditText
                    android:id="@+id/otp_first_et"
                    android:layout_width="45sp"
                    android:layout_height="45sp"
                    android:layout_marginBottom="10dp"
                    android:digits="0123456789"
                    android:drawablePadding="7dp"
                    android:gravity="center"
                    android:inputType="number"
                    android:maxLength="1"
                    android:paddingLeft="10dp"
                    android:textColor="@color/white"
                    android:textColorHint="@color/white"
                    android:textCursorDrawable="@drawable/bg_edit_text_cursor" />

                <EditText
                    android:id="@+id/otp_second_et"
                    android:layout_width="45sp"
                    android:layout_height="45sp"
                    android:layout_marginBottom="10dp"
                    android:digits="0123456789"
                    android:drawablePadding="7dp"
                    android:gravity="center"
                    android:inputType="number"
                    android:maxLength="1"
                    android:paddingLeft="10dp"
                    android:textColor="@color/white"
                    android:textColorHint="@color/white"
                    android:textCursorDrawable="@drawable/bg_edit_text_cursor" />

                <EditText
                    android:id="@+id/otp_third_et"
                    android:layout_width="45sp"
                    android:layout_height="45sp"
                    android:layout_marginBottom="10dp"
                    android:digits="0123456789"
                    android:drawablePadding="7dp"
                    android:gravity="center"
                    android:inputType="number"
                    android:maxLength="1"
                    android:paddingLeft="10dp"
                    android:textColor="@color/white"
                    android:textColorHint="@color/white"
                    android:textCursorDrawable="@drawable/bg_edit_text_cursor" />

                <EditText
                    android:id="@+id/otp_fourth_et"
                    android:layout_width="45sp"
                    android:layout_height="45sp"
                    android:layout_marginBottom="10dp"
                    android:digits="0123456789"
                    android:drawablePadding="7dp"
                    android:gravity="center"
                    android:imeOptions="actionDone"
                    android:inputType="number"
                    android:maxLength="1"
                    android:paddingLeft="10dp"
                    android:textColor="@color/white"
                    android:textColorHint="@color/white"
                    android:textCursorDrawable="@drawable/bg_edit_text_cursor" />
            </LinearLayout>

Java

EditText otpEditTextFirst, otpEditTextSecond, otpEditTextThird, otpEditTextFourth;

otpEditTextFirst = (EditText) findViewById(R.id.otp_first_et);
        otpEditTextSecond = (EditText) findViewById(R.id.otp_second_et);
        otpEditTextThird = (EditText) findViewById(R.id.otp_third_et);
        otpEditTextFourth = (EditText) findViewById(R.id.otp_fourth_et);


otpEditTextFirst.addTextChangedListener(new GenericTextWatcher(otpEditTextFirst));
        otpEditTextSecond.addTextChangedListener(new GenericTextWatcher(otpEditTextSecond));
        otpEditTextThird.addTextChangedListener(new GenericTextWatcher(otpEditTextThird));
        otpEditTextFourth.addTextChangedListener(new GenericTextWatcher(otpEditTextFourth));


class GenericTextWatcher implements TextWatcher {
        private View view;

        private GenericTextWatcher(View view) {
            this.view = view;
        }

        @Override
        public void afterTextChanged(Editable editable) {
            // TODO Auto-generated method stub
            String text = editable.toString();
            switch (view.getId()) {

                case R.id.otp_first_et:

                    if (text.length() == 1)
                        otpEditTextSecond.requestFocus();


                    break;
                case R.id.otp_second_et:

                    if (text.length() == 1)
                        otpEditTextThird.requestFocus();

                    else
                        otpEditTextFirst.requestFocus();
                    break;
                case R.id.otp_third_et:

                    if (text.length() == 1)
                        otpEditTextFourth.requestFocus();

                    else
                        otpEditTextSecond.requestFocus();
                    break;
                case R.id.otp_fourth_et:
                    if (text.length() == 0)
                        otpEditTextThird.requestFocus();


                    break;
            }
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
        }
    }
...