android:background="@null"
android:singleLine="true"
android:maxLength="18"
android:inputType="textPassword"
密码暗文:
mClickEt.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
密码明文:
mClickEt.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
android:inputType="textPassword"
if (v.getId() == R.id.iv_old_psw_visible){
setShowPassword(mOldPswIv, mOldPwdEdt);
return;
}
private void setShowPassword(ImageView mClickIv, EditText mClickEt) {
int visibleType = InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD;
if (mClickEt.getInputType() == visibleType) {
mClickIv.setImageDrawable(getResources().getDrawable(R.drawable.bbg_appportal_ic_password_unvisible));
mClickEt.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
mClickEt.setSelection(mClickEt.getText().toString().length());
} else {
mClickIv.setImageDrawable(getResources().getDrawable(R.drawable.bbg_appportal_ic_password_visible));
mClickEt.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
mClickEt.setSelection(mClickEt.getText().toString().length());
}
return;
}
或者用setTransformationMethod
的方法,设置一个showPassword的flag来判断。但是我要写三个小眼睛,难道要用三个flag嘛…还没想好怎么办,就用第一种方法了
private Boolean showPassword = true;
......
if (showPassword) {
mClickIv.setImageDrawable(getResources().getDrawable(R.drawable.bbg_appportal_ic_password_unvisible));
mClickEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
mClickEt.setSelection(mClickEt.getText().toString().length());
showPassword = !showPassword;
} else {
mClickIv.setImageDrawable(getResources().getDrawable(R.drawable.bbg_appportal_ic_password_visible));
mClickEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
mClickEt.setSelection(mClickEt.getText().toString().length());
showPassword = !showPassword;
}
return;
还有个问题是现在的隐藏密码是以圆点显示的,而交互上的要求是星号
public class AsteriskPasswordTransformationMethod extends PasswordTransformationMethod {
@Override
public CharSequence getTransformation(CharSequence source, View view) {
return new PasswordCharSequence(source);
}
private class PasswordCharSequence implements CharSequence {
private CharSequence mSource;
public PasswordCharSequence(CharSequence source) {
mSource = source; // Store char sequence
}
public char charAt(int index) {
return '*'; // This is the important part
}
public int length() {
return mSource.length(); // Return default
}
public CharSequence subSequence(int start, int end) {
return mSource.subSequence(start, end); // Return default
}
}
}
mOldPwdEdt.setTransformationMethod(new AsteriskPasswordTransformationMethod());
问题出现: 我在设置小眼睛的时候设置的通过InputType修改明文暗文,所以改变密码隐藏和可见以后,就没有*,又回到了·的格式。
真机 -> 开发人员选项 -> 绘图 -> 显示布局边界
切换EditText的密码为显示和隐藏的时候, 会有全角半角切换的问题。
原因是EditText是密码格式的时候, 默认是全角MONOSPACE的。
所以需要我们手动修改为SANS_SERIF。
mConfirmPwdEdt.setTypeface(Typeface.SANS_SERIF);
参考文章:
https://blog.csdn.net/u011106915/article/details/61913641
https://blog.csdn.net/qq_34471736/article/details/67637694