Скрыть переключение пароля с помощью 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) {
}
});
}
}
});
Теперь переключение пароля видно только в том случае, если текст редактирования пароля находится в фокусе, а также только когда пользователь что-то ввел.