EditTex实现密码的显示隐藏

在开发app时,登录和注册页面,让输入的密码是否可见的需求还是挺常见的,本以为在代码中直接设置EditText的setInputType属性就行了,谁知还是有一些坑的,本篇文章带你来填坑,前方高能,请速速避退。

完成后的效果

  在开始本文之前,先看下要实现的效果.

开始挖坑

查看EditText的setInputType可以设置的值

  先看下EditText的setInputType可以设置的Type属性有多少

Type属性
etInputType可以设置的Type属性值远不止这么多,全部的属性可以到 这里查看.查看Type可以设置的值后,发现有两个Type与密码的显示和隐藏有关,分别是

TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
TYPE_TEXT_VARIATION_PASSWORD

根据单词的意思我们知道第一个为显示密码,第二个为密码不可见.

在代码中设置setInputType的值

  根据查询的Type值便可以在代码中通过设置setInputType的值来让EditText输入的值显示隐藏.下面看下代码

 //根据图标判断是否显示密码
    private void whetherShowPas(boolean paswdVisible) {
        if (paswdVisible) {
            //设置密码为显示的状态
  mPassWd.setInputType(TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
            img_eye.setImageResource(R.mipmap.dis);
        } else {
            //设置密码为隐藏的状态
     mPassWd.setInputType(TYPE_TEXT_VARIATION_PASSWORD);
            img_eye.setImageResource(R.mipmap.hid);
        }
     mPassWd.setSelection(mPassWd.getText().length());//将光标定位到最后
    }

好了,到这里你以为就完成了,高高兴兴的跑去模拟器运行看效果,但悲催的是,切换这两个状态竟然没用,不能实现开篇时的效果.

填坑之路

  于是,我们又来查官方文档,进入刚刚查看Type值的页面,咦,这里有个Example,如下图


竟然,要再加入一个 TYPE_CLASS_TEXT,好,我们把这个值加入刚才的代码,改变后的代码如下

 //根据图标判断是否显示密码
    private void whetherShowPas(boolean paswdVisible) {
        if (paswdVisible) {
            //设置密码为显示的状态
            mPassWd.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
            img_eye.setImageResource(R.mipmap.dis);
        } else {
            //设置密码为隐藏的状态
            mPassWd.setInputType(TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD);
            img_eye.setImageResource(R.mipmap.hid);
        }
    mPassWd.setSelection(mPassWd.getText().length());//将光标定位到最后
    }

在到模拟器运行一遍,WTF,果然达到了开篇时的效果,在看下TYPE_CLASS_TEXT有什么作用

TYPE_CLASS_TEXT
Class for normal text

TYPE_CLASS_TEXT就是将EditText转化为普通文本类,原来需要将EditText转换为普通文本类设置密码是否可见才能生效。

结束语

  好了,到这里本文就结束了,可以在这里获取本文的源码
转载请注明出处:www.wizardev.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值