Android-EditText实现小眼睛按钮显示密码

Android-EditText实现小眼睛按钮显示密码

1、密码框如何实现

在进行安卓开发时,需要获取用户输入内容我们通常需要使用EditText组件获取用户输入。在获取密码等敏感信息时就要对输入内容进行隐藏处理。实现这一需求,将EditText的inputType属性设置为textPassword模式即可。

xml布局时

 android:inputType="textPassword"

java代码布局

this.EditText.setInputType(InputType.TYPE_CLASS_TEXT |
 InputType.TYPE_TEXT_VARIATION_PASSWORD);

以上将EditText文本框设置为隐藏模式

2、添加小眼睛按钮

小眼睛类似的图标,是一个image。我们可以在将一个imageview布局到对应位置,然后添加其点击事件实现,缺点是大小和其他布局不好确定,适配相对麻烦。

另外一种方式我们可以通过TextView和EditText组件可以设置的4个方向的drawable实现。

xml布局时添加drawable

android:drawableRight="@drawable/password_eye_icon_idle"

以上是通过xml布局的方式设置了右边的drawable,其他三个方向以此类推。此方式方便的设置了drawable,缺点是无法在xml中调整drawable大小,可在代码中调整。

//this.EditText伪代码表示方法,指EditText对象
Drawable rightDrawable=this.EditText.getCompoundDrawables()[2];//获取drawable对象,
//下标0~3依次对应left、top、right、bottom方向的drawable

rightDrawable.setBounds(-10,0,50,70);//设置drawable大小

java代码添加drawable

//通过资源拿到对应drawable对象
 Drawable drawable = getResources().getDrawable(R.drawable.password_eye_icon_idle);
 //设置drawable大小
 drawable.setBounds(-10, 0, 35, 30);
 //将drawable设为EditText的drawable,4个参数分别是left、top、right、bottom
 //这里设置了right位置的drawable
 this.EditText.setCompoundDrawables(null, null, drawable, null);

//这样便成功添加了drawable并调整大小,需要取消对应位置的drawable只需要再设置null即可

this.EditText.setCompoundDrawables(null, null, null, null);

通过上面两种方法即可添加需要的drawable

3、小眼睛点击事件

第二点介绍了如何添加EditText的drawable,该组件并没有实现好的drawable点击事件,接下来介绍如何给drawable添加点击事件。

通过重写EditText.onTouchEvent方法添加drawable的点击事件。
继承EditText并重写EditText.onTouchEvent方法。

private RightListener rightListener;//通过set方法传入
    @Override
    public boolean onTouchEvent(MotionEvent event) {
         //EditText按下事件判断
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            //拿到对应方向的drawable
            Drawable rightDrawable = getCompoundDrawables()[2];
            //判断手指按下的位置是否在drawable上
            if (rightDrawable != null && event.getRawX() >= (getRight() - 
             rightDrawable.getBounds().width())) {
             //执行事件具体处理事务,通过回调的方式传入
                rightListener.OnDrawbleRightClick(this);
                //返回true表示该事件以处理  
                return true;
            }

        }
        return super.onTouchEvent(event);
    }

具体点击事件实现

this.EditText.setRightListener(new RightListener() {
            @Override
            public void OnDrawbleRightClick(View view) {
                Drawable drawable =null;
                if (!flog){
                    drawable= getResources().getDrawable(R.drawable.password_eye_icon_selected);
                   //将密码框设置成明文模式      
                     ((EditText)view).setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                    flog=!flog;
                }else {
                    drawable= getResources().getDrawable(R.drawable.password_eye_icon_idle);
                    //将密码框设置成隐藏模式 
                    ((EditText)view).setTransformationMethod(PasswordTransformationMethod.getInstance());

                    flog=!flog;
                }

                drawable.setBounds(-10, 0, 35, 30);
                ((EditText)view).setCompoundDrawables(null, null, drawable, null);
            }
        });

4、如何设置EditText显示或隐藏密码

在EditText为 android:inputType="textPassword"模式下

//密码框显示密码
this.EditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
//密码框隐藏密码
this.EditText.setTransformationMethod(PasswordTransformationMethod.getInstance());

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值