android 实现点击edittext的“小眼睛”切换明密文
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地址:
android 实现点击edittext的“小眼睛”切换明密文的更多相关文章
- android在点击EditText的时候始终不弹出软件键盘
场景描述:正常情况下,当点击EditText时,软键盘会弹出来.现在的要求是当点击EditText时,弹日期选择对话框,选择的结果显示在EditText上.若不处理,当点击EditText时,软键盘和 ...
- Android点击EditText文本框之外任何地方隐藏键盘的解决办法
1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android=&q ...
- 在android中如何通过点击edittext之外的部分使软键盘隐藏
我们知道在android中点击edittext框就会自动弹出软键盘,那怎么通过点击edittext之外的部分使软键盘隐藏呢?(微信聊天时的输入框就是这个效果,这个给用户的体验还是很不错的) 首先我们要 ...
- android制,点击EditText时刻,隐藏系统软键盘,显示光标
由于项目中要用自己定义的随机键盘,所以必须得屏蔽系统软键盘,可是在4.0的測试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,可是 ...
- 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。
1. 拍照裁剪后 点击EditText会弹出输入法,却不能输入.可是点击点一EdtiText就能够输入了,所以我就写了一个看不见的EdtiText,切换焦点,这样就攻克了这个奇怪的这问题,应该是and ...
- [安卓] 3、EditText使用小程序
这里比较简单,看下面代码就能知道了:在按钮的点击事件时用String str = et.getText().toString();获取文本内容. public class MainActivity e ...
- Android开发UI之EditText+DatePicker带日期选择器的编辑框
1. 声明EditText变量,并关联到相应控件上 private EditText sellStartTime; private EditText sellEndTime; sellStartTim ...
- Android ImageView 点击更换头像
首先搭建布局 主界面布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
- IE10去掉input的type=”text”输入内容时出现的小叉号(X)和type=”password”出现的小眼睛图标
最近在做一个后台管理系统项目,遇到以下两个问题: 1.从IE 10开始,type="text" 的 input 在用户输入内容后,会自动产生一个小叉号(X),方便用户点击清除已经输 ...
随机推荐
- centos7下误执行chmod -R 777 /后的权限修复方法
今天由于权限问题zz一般把/usr/bin和/usr/lib两个目录用chmod -R 777执行了一遍,结果各种问题出现,su root就报su:鉴定故障的错误.然后上网找教程很多都要求在root权 ...
- Python:游戏:测试打字速度
现在写书的人真是一点责任心都没有,最近看了几本书,其中的代码都存在错误. 最近迷恋 Python 游戏,买了<Python游戏编程入门>[美] Jonathan S·Harbour 著 一 ...
- leetcode — longest-consecutive-sequence
import java.util.HashSet; import java.util.Set; /** * Source : https://oj.leetcode.com/problems/long ...
- Android IllegalArgumentException: Cannot draw recycled bitmaps解决方法
在编码图集过程中,出现了Android IllegalArgumentException: Cannot draw recycled bitmaps错误. 大致意思是:不能使用已经被回收的bitmap ...
- AppBoxFuture(二): Say goodbye to sql!
信息管理类应用系统离不开关系数据存储,目前大家基本都使用的是传统的数据库如MySql.Postgres等.作者从事信息化建设十多年,个人认为传统的数据库存在以下的问题: 扩展问题: 系统数据的 ...
- Docker多主机管理(八)--技术流ken
docker多主机管理 前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和 ...
- Linux常用命令详解(week1_day1_3)--技术流ken
本节内容 pidofpstopipuptimewgetcurltrddtargrepfind 命令详解 1.pidof 获取正在运行程序的PID 实例1: [root@ken ~]# pidof ss ...
- Atom编辑器插件
一.atom由于安装的插件过多导致tab键失效解决办法如下: 打开File→Keymap中keymap.cson文件,将以下代码复制到文件: 'atom-text-editor:not([mini]) ...
- C#_实现冒泡排序
//排序方法类public class Bubble { ; public static void SBubble(ref int[] intArr) { ; outSize < intArr. ...
- Java基础:HashMap假死锁问题的测试、分析和总结
前言 前两天在公司的内部博客看到一个同事分享的线上服务挂掉CPU100%的文章,让我联想到HashMap在不恰当使用情况下的死循环问题,这里做个整理和总结,也顺便复习下HashMap. 直接上测试代码 ...