出现错误警告时隐藏passwordToggleEnable

时间:2017-07-17 10:41:24

标签: android passwords android-textinputlayout

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

pic 1pic 2

如果我试过这个

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

然后结果就像这样

pic3,但这就是我想要的pic4错误警告上面的图标错误,

有没有人见过这个问题?谢谢

这是我的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>

3 个答案:

答案 0 :(得分:2)

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

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将被禁用。

答案 1 :(得分:1)

这是我得到试验错误后的结论,我正在检查错误,如果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);
}

这是我案例的最简单方法

答案 2 :(得分:0)

  

试试这个

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