出现错误警告时隐藏 passwordToggleEnable

Hide passwordToggleEnable when error warnings occur

我们能否在用户收到警告错误时暂时隐藏 passwordToggle,并在用户用一些数据填充 EditText 时将其显示回来,看这张图片

and

如果我试过这个

if (etPassNow.length() == 0){
    etPassNow.setError("No data");
    textInputLayout.setPasswordVisibilityToggleEnabled(false);
} 

那么结果就是这样

, but this is what i want 错误警告上方有图标错误,

有没有人遇到过这个问题?谢谢

这是我的xml

<android.support.design.widget.TextInputLayout
        android:id="@+id/ti_new_pass"
        android:layout_width="250dp"
        android:layout_height="50dp"
        android:layout_gravity="center"
        app:passwordToggleEnabled="true">
        <android.support.design.widget.TextInputEditText
            android:id="@+id/et_new_pass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Kata Sandi Baru"
            android:imeOptions="actionDone"
            android:inputType="textPassword"
            android:paddingBottom="25dp"
            android:paddingStart="30dp"
            android:singleLine="true"
            android:textColor="@color/dc_gray"
            android:textSize="16sp"/>
</android.support.design.widget.TextInputLayout>

try this

if (etPassNow.length() == 0) {
            etPassNow.setError("No data");
            etPassNow.setTransformationMethod(null);
        } else {
            etPassword.setTransformationMethod(new PasswordTransformationMethod());
        }

这是我在尝试错误后得出的结论,如果 onClick 操作中的字段为空,我正在检查错误

if (etPassNow.length() == 0)
     etPassNow.setError("Please fill data");

对于 passwordToggle,我在 onTextChange 中激活它

etPassNow.addTextChangeListener(this);

public void onTextChanged(CharSequence s, int start, int before, int count){
     if (etPassNow.getText().toString().length() > 0)
          textInputLayout.setPasswordVisibilityToggleEnabled(true);
     else
          textInputLayout.setPasswordVisibilityToggleEnabled(false);
}

这是我的案例最简单的方法

上面使用的方法已被弃用,因此不再使用,因此我们必须使用新方法

passwordTxtInputLayout = findViewById(R.id.text_input_layout_password);
        etPassword = findViewById(R.id.login_password);
        if (etPassword != null) {
            etPassword.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {


                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    passwordTxtInputLayout.setEndIconVisible(true);

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });

并在密码长度小于等于零时调用此函数

passwordTxtInputLayout.setEndIconVisible(false);

确保在调用 setError 之前调用此函数,否则 eyeIcon 将被禁用。