Android EditText,切换密码可见性



您可以说这是重复的,但事实并非如此。事实上,我找到了解决方案,但没有一个能完美工作。最后的解决方案是使用TextInputLayout加上EditText,但有没有办法将切换按钮移动到EditText的另一侧?如果没有,那对我来说就没用了。

<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="130dp"
android:layoutDirection="rtl"
app:passwordToggleEnabled="true">
<EditText
android:id="@+id/edlrPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:paddingRight="10dp"
android:paddingLeft="10dp"
android:layoutDirection="rtl"
android:textAlignment="viewStart"
android:inputType="textPassword"
android:maxLines="1"
android:textSize="14sp" />
</android.support.design.widget.TextInputLayout>

同样,问题是切换按钮放置在EditText上,使其一部分不可见。

我也试过这些代码:

if (b)
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
else 
editText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT);

我也试过这个代码:

if (b)
editText.setInputType(InputType.TYPE_CLASS_TEXT);
else
editText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

两者都适用于第一次更改,然后EditText中的文本始终可见。我该怎么办?感谢您的帮助。

更新:所以我刚刚注意到我需要将android:layoutDirection="rtl"添加到TextInputLayout!以前我只将它添加到editText中,导致了一个冲突(因为默认情况下TextInputLayoutltr),使切换按钮覆盖了editText。顺便说一句,当我把我的editText放在TextInputLayout里时,setTransformationMethod(new PasswordTransformationMethod())也能很好地工作,尽管我不再需要它了!

感谢大家的参与。

TextInputLayout中的EditText中添加app:passwordToggleEnabled="true"。它将切换密码可见性,反之亦然。删除您的java代码

hi您可以替换此代码并享受它!

edtPassword->您的编辑文本(密码)

show_password->image查看显示您的密码

public void setPassword_show() {
if (!edtPassword.getText().toString().equals("")) {
if (show_password.getTag().toString().equals(IS_ONE_CLICK)) {
edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
if (Build.VERSION.SDK_INT >= 21)
show_password.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_visibility_black_24dp));
else
show_password.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_visibility_black_24dp,
null));
show_password.setTag((Object) IS_TWO_CLICK);
} else if (show_password.getTag().toString().equals(IS_TWO_CLICK)) {
edtPassword.setInputType(129);
if (Build.VERSION.SDK_INT >= 21)
show_password.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_visibility_off_black_24dp));
else
show_password.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_visibility_off_black_24dp, null));
show_password.setTag((Object) IS_ONE_CLICK);
}
}
}

这里有另一种实现你需要设置drawable left,你需要通过edittext.setOnTouchListener收听它的点击事件在那之后这个答案https://stackoverflow.com/a/3685867/10561246

最新更新