最近项目中有这样的一个需求,就是提供给用户显示密码和隐藏密码
由于之前没有使用过,遂去寻找方案
我们都知道EditText 控件有输入的属性

这里设置类型比较多,我们可以选择,基本能满足日常开发使用,特殊需求的输入另说
ok,说到这里,我们选择一种password类型:textPassword,默认密码是不可见。
接下来就是在代码中实现显示和隐藏密码
方案1、设置输入类型
if (pwdIsVisible) {
//隐藏
pwd_et.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
//显示
pwd_et.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}
pwdIsVisible = !pwdIsVisible;
方案2、 设置正在被运用于TextView 上的文本的转换
if (pwdIsVisible) {
pwd_et.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}else {
pwd_et.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
pwdIsVisible = !pwdIsVisible;
比较上诉两种的区别
方案1、准确来说就是原生属性提供了java方法,对应了XML属性设置,应用场景就是java代码设置的类型需和xml设置的属性一致。
方案2、转换文本的设置好处就是,不需要关心xml输入类型的设置,这里只做显示和隐藏处理,并不会改变输入类型。
如果用方案1,可能会有一个问题,当我们的需求是输入特定的字符,比如还支持!@#¥%……&* 等部分特殊字符。
java或者xml设置比较麻烦,目前知道的输入监听
java代码addTextChangedListener(),内部实现输入控制
或者xml可以直接使用android:digits=“”,但如果实现显示或者隐藏,没有这个属性,那会引发输入的字符会变所有的
例如,xml设置android:digits=“12345678!#%”
java显示或隐藏 就会调用方案1中的代码去做,然而这时候inputType是么有指定字符的类型,故不能实现
所以还是推荐使用方案2
网友评论