Скрыть переключение пароля с помощью textinputlayout, когда текст редактирования не в фокусе

Это код, который я использую в своем проекте:

<android.support.design.widget.TextInputLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/signup_input_full_name_wrapper"
        android:layout_marginEnd="@dimen/signup_edit_text_input_fullname_margin_right"
        android:layout_marginRight="@dimen/signup_edit_text_input_fullname_margin_right"
        android:layout_marginStart="@dimen/signup_edit_text_input_fullname_margin_left"
        android:layout_marginLeft="@dimen/signup_edit_text_input_fullname_margin_left"
        android:layout_marginTop="@dimen/signup_edit_text_input_fullname_margin_top"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/signup_input_password_wrapper">
    <EditText
        android:id="@+id/signup_input_full_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="Full Name"
        android:textSize="@dimen/signup_edit_text_input_fullname_text_size"
        android:textColorHint="@color/signup_edit_text_hint_color"
         />
</android.support.design.widget.TextInputLayout>

Это работает так, как написано, то есть предоставляет мне переключатель пароля для вложенного текста редактирования. Что я хочу, если есть какой-либо способ, которым он может быть скрыт, когда редактируемый текст не имеет фокуса?

2 ответа

Решение

Это может быть не лучшая практика, а ее работа.

ваш xml:

           <android.support.design.widget.TextInputLayout
                android:id="@+id/etPasswordLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:passwordToggleEnabled="false">

                <android.support.design.widget.TextInputEditText
                    android:id="@+id/etPassword"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="password"
                    android:inputType="textPassword"/>
            </android.support.design.widget.TextInputLayout>

ваша деятельность или фрагмент:

etPassword.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean isFocused) {
                if(!isFocused){
                    etPasswordLayout.setPasswordVisibilityToggleEnabled(false);
                }else{
                    etPasswordLayout.setPasswordVisibilityToggleEnabled(true);
                }
            }
        });

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

private EditText etPassword;
private TextInputLayout etPasswordLayout;
//View componenets initialization
    etPassword = findViewById(R.id.signup_input_password);
    etPasswordLayout = findViewById(R.id.signup_input_password_wrapper);


    //toggling the password view functionality
    etPassword.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean isFocused) {
            if(!isFocused){
                etPasswordLayout.setPasswordVisibilityToggleEnabled(false);
            }else{

                etPassword.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                    }

                    @Override
                    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                        if(etPassword.getText().toString().length() > 0) {
                            etPasswordLayout.setPasswordVisibilityToggleEnabled(true);
                        }
                        else{
                            etPasswordLayout.setPasswordVisibilityToggleEnabled(false);
                        }
                    }

                    @Override
                    public void afterTextChanged(Editable editable) {

                    }
                });

            }
        }
    });

Теперь переключение пароля видно только в том случае, если текст редактирования пароля находится в фокусе, а также только когда пользователь что-то ввел.

Другие вопросы по тегам