android 显示密码和隐藏密码

最近项目中有这样的一个需求,就是提供给用户显示密码和隐藏密码

由于之前没有使用过,遂去寻找方案

我们都知道EditText 控件有输入的属性

android 显示密码和隐藏密码_第1张图片

这里设置类型比较多,我们可以选择,基本能满足日常开发使用,特殊需求的输入另说

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

你可能感兴趣的:(android 显示密码和隐藏密码)