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

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

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

先来看一下效果图:

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

布局文件:

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"> <EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/et_bg"
android:inputType="textPassword"
android:maxLength="10" /> <ImageView
android:id="@+id/imageView"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentRight="true"
android:layout_margin="10dp" /> </RelativeLayout>

activity中使用:


public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText editText;
private ImageView imageView;
private boolean isHideFirst = true;// 输入框密码是否是隐藏的,默认为true @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.editText);
imageView = (ImageView) findViewById(R.id.imageView);
imageView.setOnClickListener(this);
imageView.setImageResource(R.drawable.close);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imageView:
if (isHideFirst == true) {
imageView.setImageResource(R.drawable.open);
//密文
HideReturnsTransformationMethod method1 = HideReturnsTransformationMethod.getInstance();
editText.setTransformationMethod(method1);
isHideFirst = false;
} else {
imageView.setImageResource(R.drawable.close);
//密文
TransformationMethod method = PasswordTransformationMethod.getInstance();
editText.setTransformationMethod(method);
isHideFirst = true; }
// 光标的位置
int index = editText.getText().toString().length();
editText.setSelection(index);
break; }
}
}
二、 

xml中:

  <RelativeLayout
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"> <EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:paddingRight="10dp"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:background="@drawable/et_bg"
android:maxLength="10"
android:drawableRight="@drawable/close" /> </RelativeLayout>

activity中使用:


public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText editText1;
private boolean isHideFirst = true;// 输入框密码是否是隐藏的,默认为true @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); editText1 = (EditText) findViewById(R.id.editText1);
final Drawable[] drawables = editText1.getCompoundDrawables();
final int eyeWidth = drawables[2].getBounds().width();// 眼睛图标的宽度
final Drawable drawableEyeOpen = getResources().getDrawable(R.drawable.open);
drawableEyeOpen.setBounds(drawables[2].getBounds());//这一步不能省略
editText1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) {
float et_pwdMinX = v.getWidth() - eyeWidth - editText1.getPaddingRight();
float et_pwdMaxX = v.getWidth();
float et_pwdMinY = 0;
float et_pwdMaxY = v.getHeight();
float x = event.getX();
float y = event.getY(); if (x < et_pwdMaxX && x > et_pwdMinX && y > et_pwdMinY && y < et_pwdMaxY) {
// 点击了眼睛图标的位置
isHideFirst = !isHideFirst;
if (isHideFirst) {
editText1.setCompoundDrawables(null,
null,
drawables[2], null); editText1.setTransformationMethod(PasswordTransformationMethod.getInstance());
} else {
editText1.setCompoundDrawables(null, null,
drawableEyeOpen,
null);
editText1.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
}
}
return false;
} } );
}
}

还有et_bg.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <!-- 设置背景的颜色-->
<solid android:color="#ffffff" /> <!-- 设置边框的颜色和宽度 -->
<stroke
android:width="8dp"
android:color="#ffffff" /> <!--设置圆角-->
<corners android:radius="2dp" /> <!--设置padding值-->
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
</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. SpringBoot入门教程(二十)Swagger2-自动生成RESTful规范API文档

    Swagger2 方式,一定会让你有不一样的开发体验:功能丰富 :支持多种注解,自动生成接口文档界面,支持在界面测试API接口功能:及时更新 :开发过程中花一点写注释的时间,就可以及时的更新API文档 ...

  2. 【单例模式】java实现

    概述:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 关键点: 构造函数不对外开放,一般为private. 通过一个静态方法或者枚举返回单例类对象. 确保单例类的对象有且只有一个,尤 ...

  3. 解决GOOGLE无法访问

    修改hosts文件 https://github.com/txthinking/google-hosts  

  4. IDEA搭建Spring Boot项目

    所需工具 新建项目 创建一个login控制器 写入两个注释 import导入项会自动添加@RestController@RequestMapping(value = "/login" ...

  5. Linux基础知识第二讲,文件目录命令使用

    目录 一丶Linux终端使用技巧. 1.自动补全 Tab技巧. 2.使用输入过的命令 二丶Linux 目录知识 1.linux目录的特点 2.ls 隐藏文件的查看 3.ls 常用选项 4.通配符的配合 ...

  6. JDK源码分析(8)之 Reference 完全解读

    在阅读本文之前最好对 Reference 框架有一个整体的把握,可以参考我上一篇博客 Reference 框架概览 :本文主要讲了 Reference 的子类实现和应用(SoftReference,W ...

  7. Java实现将任何编码方式的txt文件以UTF-8编码方式转存

    本文利用JDK中的BufferedReader和BufferedWriter实现将任何编码方式的txt文件以UTF-8编码方式转存. UTF-8(8-bit Unicode Transformatio ...

  8. Java读取Excel指定列的数据详细教程和注意事项

    本文使用jxl.jar工具类库实现读取Excel中指定列的数据. jxl.jar是通过java操作excel表格的工具类库,是由java语言开发而成的.这套API是纯Java的,并不依赖Windows ...

  9. javascript基础修炼(7)——Promise,异步,可靠性

    开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一. 别人是开发者,你也是 Promise技术是[javascript异步编程]这个话题中非常重要的,它一度让我感到熟悉 ...

  10. WPF 语言格式化文本控件

    前言 本章讲述正确添加语言资源的方式,以及一段语言资源的多种样式显示. 例如:“@Winter,你好!感谢已使用软件 800 天!” 在添加如上多语言资源项时,“XX,你好!感谢已使用软件 X 天!” ...