项目中经常会有这样的需求,在密码输入框的右边有一个小图标,点击就切换显示和隐藏密码。

其实这里需求实现起来是比较容易的,主要考虑是复用问题,因为登陆、注册、修改密码界面都会有这样的情景,如果每个界面都独立写一次这样的逻辑显然是不符合代码复用的理念,所以需要把这个情景抽象出来,用代码去实现一个工具库。

首先必须说一说EditText的inputType了,当我们在XML中指定EditText的inputType为textPassword时,输入的内容会以星号呈现。

 <EditText
            android:id="@+id/edittext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPassword" />

现在当程序运行的时候,输入的内容呈现为密码的形式,当我们点击显示密码的小图标,我们需要让EditText显示输入的内容,我们可以通过代码改变EditText的inputType。

if (hidePwd == true) { // 输入的内容显示为星号
    uiPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
} else { // 正常显示输入内容
    uiPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}

通常密码输入框右边有个小图标,点击会切换显示/隐藏密码,同时小图标在显示和隐藏状态中的图标是不一样的。现在针对小图标点击,然后切换密码框的输入状态,把这种行为抽象出来成为一个函数。

// image : 小图标
// editor : 输入框
// showingDrawable : 显示密码时的小图标
// hidingDrawable : 隐藏密码时的小图标
public static void bingPwdSwitch(final ImageView image, final EditText editor, final int showingDrawable, final int hidingDrawable) {
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (image.getTag().equals("1") || image.getTag() == null) {
                    image.setTag("0");
                    image.setImageResource(showingDrawable);
                } else {
                    image.setTag("1");
                    image.setImageResource(hidingDrawable);
                }

                if (image.getTag().equals("1") || image.getTag() == null) {
                    editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                } else {
                    editor.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                }
            }
        });
    }

上面使用了View的getTag()方法,目的是作为状态的判断,为null或者1表示当前状态是隐藏密码,为0表示当前是显示密码状态。EditText在XML中的inputType为textPassword,在Activity的onCreate()中调用函数进行绑定即可。

bingPwdSwitch(uaShowHidePwd, uiPassword, R.mipmap.login_ic_pwd, R.mipmap.login_ic_unpwd);

最新文章

  1. CSS 布局口诀
  2. 我常用的VS技巧
  3. /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc
  4. JavaScript执行bat文件清理浏览器缓存
  5. js中的浅拷贝和深拷贝
  6. Java 如何有效地避免OOM:善于利用软引用和弱引用
  7. JAVA题 矩形
  8. Ninject依赖注入——构造函数的注入
  9. 一元线性回归模型与最小二乘法及其C++实现
  10. hdu 4707 Pet(DFS水过)
  11. union与union all 的区别
  12. Android 之流媒体播放器,广播侧下方这么简单。
  13. stm32l053r8 nucelo板的串口实验
  14. PHPUnit-附录 A. 断言 (assert)
  15. FZU 2157 树形DP
  16. 【IIS】解决IIS无响应假死状态,asp突然无法访问重启后可以使用是什么原因
  17. C#中抽象类和接口的区别(二)
  18. Spring学习札记(一)
  19. C++数值类型与string的相互转换
  20. 算法(第四版)C# 习题题解——1.2

热门文章

  1. 递归函数 Vue ElementUI
  2. 蓝桥杯近三年决赛题之一(15年B组)
  3. CASE WHEN 及 SELECT CASE WHEN的用法
  4. Linux安全之SSH 密钥创建及密钥登录
  5. keil在线烧录突然提示 No target connected #
  6. PureMVC 官方文档翻译(一)
  7. [NOIP2017普及组]棋盘
  8. cnetos7设置中文显示及中文输入法
  9. Python数据分析Pandas库之熊猫(10分钟一)
  10. python模块部分----模块、包、常用模块