需求:在开发时遇到登录注册需要输入密码,一般为了提高客户体验,都会有一个按钮,点击后可以查看明文密码。
效果图:
解决方法:
第一种:
//显示密码
iv_hide.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
iv_hide.setVisibility(View.GONE);
iv_show.setVisibility(View.VISIBLE);
//显示密码关键代码
et_password .setTransformationMethod(HideReturnsTransformationMethod
.getInstance());
// 切换后将EditText光标置于末尾
CharSequence charSequence = et_password.getText();
if (charSequence instanceof Spannable) {
Spannable spanText = (Spannable) charSequence;
Selection.setSelection(spanText, charSequence.length());
}
}
});
//隐藏密码
iv_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
iv_show.setVisibility(View.GONE);
iv_hide.setVisibility(View.VISIBLE);
//隐藏密码关键代码
et_password .setTransformationMethod(PasswordTransformationMethod
.getInstance());
// 切换后将EditText光标置于末尾
CharSequence charSequence = et_password.getText();
if (charSequence instanceof Spannable) {
Spannable spanText = (Spannable) charSequence;
Selection.setSelection(spanText, charSequence.length());
}
}
});
第二种方法:
//显示密码
iv_hide.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
iv_hide.setVisibility(View.GONE);
iv_show.setVisibility(View.VISIBLE);
//显示密码方法
et_password.setInputType(1);
// 切换后将EditText光标置于末尾
CharSequence charSequence = et_password.getText();
if (charSequence instanceof Spannable) {
Spannable spanText = (Spannable) charSequence;
Selection.setSelection(spanText, charSequence.length());
}
}
});
//隐藏密码
iv_show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
iv_show.setVisibility(View.GONE);
iv_hide.setVisibility(View.VISIBLE);
//隐藏密码
et_password.setInputType(129);
// 切换后将EditText光标置于末尾
CharSequence charSequence = et_password.getText();
if (charSequence instanceof Spannable) {
Spannable spanText = (Spannable) charSequence;
Selection.setSelection(spanText, charSequence.length());
}
}
});
这两种方法都可以实现,相比第二种可能代码稍微简单些,谢谢观看!