android 实现点击edittext的“小眼睛”切换明密文

 
 版权声明:本文为博主原创文章,未经博主允许不得转载。  

很多时候,我们为了用户的隐私安全,需要在密码输入的时候,显示密文。为了更好的用户体验,我们给用户提供了可以切换明密文的小图标(小眼睛)

先来看一下效果图:

这里我们可以有两种实现方式: 
一、

布局文件:

  1. <RelativeLayout
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content">
  4. <EditText
  5. android:id="@+id/editText"
  6. android:layout_width="match_parent"
  7. android:layout_height="wrap_content"
  8. android:background="@drawable/et_bg"
  9. android:inputType="textPassword"
  10. android:maxLength="10" />
  11. <ImageView
  12. android:id="@+id/imageView"
  13. android:layout_width="20dp"
  14. android:layout_height="20dp"
  15. android:layout_alignParentRight="true"
  16. android:layout_margin="10dp" />
  17. </RelativeLayout>

activity中使用:


  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  2. private EditText editText;
  3. private ImageView imageView;
  4. private boolean isHideFirst = true;// 输入框密码是否是隐藏的,默认为true
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. editText = (EditText) findViewById(R.id.editText);
  10. imageView = (ImageView) findViewById(R.id.imageView);
  11. imageView.setOnClickListener(this);
  12. imageView.setImageResource(R.drawable.close);
  13. }
  14. @Override
  15. public void onClick(View v) {
  16. switch (v.getId()) {
  17. case R.id.imageView:
  18. if (isHideFirst == true) {
  19. imageView.setImageResource(R.drawable.open);
  20. //密文
  21. HideReturnsTransformationMethod method1 = HideReturnsTransformationMethod.getInstance();
  22. editText.setTransformationMethod(method1);
  23. isHideFirst = false;
  24. } else {
  25. imageView.setImageResource(R.drawable.close);
  26. //密文
  27. TransformationMethod method = PasswordTransformationMethod.getInstance();
  28. editText.setTransformationMethod(method);
  29. isHideFirst = true;
  30. }
  31. // 光标的位置
  32. int index = editText.getText().toString().length();
  33. editText.setSelection(index);
  34. break;
  35. }
  36. }
  37. }
  38. 二、 

xml中:

  1. <RelativeLayout
  2. android:layout_marginTop="20dp"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content">
  5. <EditText
  6. android:id="@+id/editText1"
  7. android:layout_width="match_parent"
  8. android:paddingRight="10dp"
  9. android:layout_height="wrap_content"
  10. android:inputType="textPassword"
  11. android:background="@drawable/et_bg"
  12. android:maxLength="10"
  13. android:drawableRight="@drawable/close" />
  14. </RelativeLayout>

activity中使用:


  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  2. private EditText editText1;
  3. private boolean isHideFirst = true;// 输入框密码是否是隐藏的,默认为true
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. editText1 = (EditText) findViewById(R.id.editText1);
  9. final Drawable[] drawables = editText1.getCompoundDrawables();
  10. final int eyeWidth = drawables[2].getBounds().width();// 眼睛图标的宽度
  11. final Drawable drawableEyeOpen = getResources().getDrawable(R.drawable.open);
  12. drawableEyeOpen.setBounds(drawables[2].getBounds());//这一步不能省略
  13. editText1.setOnTouchListener(new View.OnTouchListener() {
  14. @Override
  15. public boolean onTouch(View v, MotionEvent event) {
  16. if (event.getAction() == MotionEvent.ACTION_UP) {
  17. float et_pwdMinX = v.getWidth() - eyeWidth - editText1.getPaddingRight();
  18. float et_pwdMaxX = v.getWidth();
  19. float et_pwdMinY = 0;
  20. float et_pwdMaxY = v.getHeight();
  21. float x = event.getX();
  22. float y = event.getY();
  23. if (x < et_pwdMaxX && x > et_pwdMinX && y > et_pwdMinY && y < et_pwdMaxY) {
  24. // 点击了眼睛图标的位置
  25. isHideFirst = !isHideFirst;
  26. if (isHideFirst) {
  27. editText1.setCompoundDrawables(null,
  28. null,
  29. drawables[2], null);
  30. editText1.setTransformationMethod(PasswordTransformationMethod.getInstance());
  31. } else {
  32. editText1.setCompoundDrawables(null, null,
  33. drawableEyeOpen,
  34. null);
  35. editText1.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
  36. }
  37. }
  38. }
  39. return false;
  40. }
  41. }
  42. );
  43. }
  44. }

还有et_bg.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <!-- 设置背景的颜色-->
  7. <solid android:color="#ffffff" />
  8. <!-- 设置边框的颜色和宽度 -->
  9. <stroke
  10. android:width="8dp"
  11. android:color="#ffffff" />
  12. <!--设置圆角-->
  13. <corners android:radius="2dp" />
  14. <!--设置padding值-->
  15. <padding
  16. android:bottom="5dp"
  17. android:left="5dp"
  18. android:right="5dp"
  19. android:top="5dp" />
  20. </shape>

demo地址:

http://download.csdn.net/detail/afanbaby/9906227

android 实现点击edittext的“小眼睛”切换明密文的更多相关文章

  1. android在点击EditText的时候始终不弹出软件键盘

    场景描述:正常情况下,当点击EditText时,软键盘会弹出来.现在的要求是当点击EditText时,弹日期选择对话框,选择的结果显示在EditText上.若不处理,当点击EditText时,软键盘和 ...

  2. Android点击EditText文本框之外任何地方隐藏键盘的解决办法

    1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android=&q ...

  3. 在android中如何通过点击edittext之外的部分使软键盘隐藏

    我们知道在android中点击edittext框就会自动弹出软键盘,那怎么通过点击edittext之外的部分使软键盘隐藏呢?(微信聊天时的输入框就是这个效果,这个给用户的体验还是很不错的) 首先我们要 ...

  4. android制,点击EditText时刻,隐藏系统软键盘,显示光标

    由于项目中要用自己定义的随机键盘,所以必须得屏蔽系统软键盘,可是在4.0的測试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,可是 ...

  5. 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。

    1. 拍照裁剪后 点击EditText会弹出输入法,却不能输入.可是点击点一EdtiText就能够输入了,所以我就写了一个看不见的EdtiText,切换焦点,这样就攻克了这个奇怪的这问题,应该是and ...

  6. [安卓] 3、EditText使用小程序

    这里比较简单,看下面代码就能知道了:在按钮的点击事件时用String str = et.getText().toString();获取文本内容. public class MainActivity e ...

  7. Android开发UI之EditText+DatePicker带日期选择器的编辑框

    1. 声明EditText变量,并关联到相应控件上 private EditText sellStartTime; private EditText sellEndTime; sellStartTim ...

  8. Android ImageView 点击更换头像

    首先搭建布局 主界面布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  9. IE10去掉input的type=”text”输入内容时出现的小叉号(X)和type=”password”出现的小眼睛图标

    最近在做一个后台管理系统项目,遇到以下两个问题: 1.从IE 10开始,type="text" 的 input 在用户输入内容后,会自动产生一个小叉号(X),方便用户点击清除已经输 ...

随机推荐

  1. centos7下误执行chmod -R 777 /后的权限修复方法

    今天由于权限问题zz一般把/usr/bin和/usr/lib两个目录用chmod -R 777执行了一遍,结果各种问题出现,su root就报su:鉴定故障的错误.然后上网找教程很多都要求在root权 ...

  2. Python:游戏:测试打字速度

    现在写书的人真是一点责任心都没有,最近看了几本书,其中的代码都存在错误. 最近迷恋 Python 游戏,买了<Python游戏编程入门>[美] Jonathan S·Harbour 著 一 ...

  3. leetcode — longest-consecutive-sequence

    import java.util.HashSet; import java.util.Set; /** * Source : https://oj.leetcode.com/problems/long ...

  4. Android IllegalArgumentException: Cannot draw recycled bitmaps解决方法

    在编码图集过程中,出现了Android IllegalArgumentException: Cannot draw recycled bitmaps错误. 大致意思是:不能使用已经被回收的bitmap ...

  5. AppBoxFuture(二): Say goodbye to sql!

      信息管理类应用系统离不开关系数据存储,目前大家基本都使用的是传统的数据库如MySql.Postgres等.作者从事信息化建设十多年,个人认为传统的数据库存在以下的问题: 扩展问题:   系统数据的 ...

  6. Docker多主机管理(八)--技术流ken

    docker多主机管理 前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和 ...

  7. Linux常用命令详解(week1_day1_3)--技术流ken

    本节内容 pidofpstopipuptimewgetcurltrddtargrepfind 命令详解 1.pidof 获取正在运行程序的PID 实例1: [root@ken ~]# pidof ss ...

  8. Atom编辑器插件

    一.atom由于安装的插件过多导致tab键失效解决办法如下: 打开File→Keymap中keymap.cson文件,将以下代码复制到文件: 'atom-text-editor:not([mini]) ...

  9. C#_实现冒泡排序

    //排序方法类public class Bubble { ; public static void SBubble(ref int[] intArr) { ; outSize < intArr. ...

  10. Java基础:HashMap假死锁问题的测试、分析和总结

    前言 前两天在公司的内部博客看到一个同事分享的线上服务挂掉CPU100%的文章,让我联想到HashMap在不恰当使用情况下的死循环问题,这里做个整理和总结,也顺便复习下HashMap. 直接上测试代码 ...