EditTex实现密码的显示隐藏

来源:互联网 发布:天天聚财网网络贷款 编辑:程序博客网 时间:2024/06/01 08:56

在开发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

原创粉丝点击