在输入密码登录某个系统或者游戏时,在密码框的右侧有一个眼睛标志的按键,如图1所示。

图1 登录界面的眼睛按键
按住不放该按键,此时会显示用户在密码框中输入的密码,松开该按键后,密码恢复成加密状态。在Android Studio中,以上过程可以通过按键的触摸监听器(Touch Listener)来实现。代码如图2所示。

图2 触摸监听器的代码
1 Button类的setOnTouchListner()方法
从图2可以看出,bt5是Button类的对象,并且已经和按键进行了关联。通过bt5的setOnTouchListner()方法为按键添加触摸监听器,如图2①所示,该方法的用法如下所示。
public void setOnTouchListener (View.OnTouchListener l)
其中,参数l是View.OnTouchListener接口类型的对象,setOnTouchListner()方法的作用是注册一个回调方法,当按键上发生了触摸事件时,可以调用该回调方法,即参数l。
2 View.OnTouchListener接口
图2②中所示的View.OnTouchListener是一个接口,专门用于处理发生在控件上的触摸事件。该方法中有一个公共的抽象方法onTouch,当触摸事件发生给控件时,就会调用该方法,如图2③所示。添加触摸监听器,就必须重写这个抽象的方法。抽象方法onTouch的格式如下所示。
abstract boolean onTouch(View v, MotionEvent motionEvent)
该函数的参数v表示发生触摸事件的控件;参数motionEvent是MotionEvent类的对象,该对象包含了触摸事件的相关信息。在onTouch中,通过参数motionEvent获取冲模事件的具体动作,通过switch…case语句,对不同的动作进行不同的处理,如图3所示。

图3 onTouch()方法的代码
3 MotionEvent类
MotionEvent类用于表示鼠标、手写笔或者手势的移动事件;图3①中通过MotionEvenet类的对象motionEvent调用了该类的getAction()方法,该方法的作用是获取动作的类型,将该类型作为返回值。图3②中的MotionEvent.ACTION_DOWN表示按压的动作的开始,图3③中的MotionEvent.ACTION_UP表示按压动作的结束,在程序中,对于不同的动作要进行不同的处理。
相关链接1 onTouch()方法的返回值,为控件添加了触摸监听器后,在控件处理该触摸事件之前,onTouch()方法会先处理该事件。onTouch()方法的返回值类型是boolean,当返回值是false时,触摸事件会传递给控件继续处理,当该方法返回true时,触摸事件将不会传递给控件处理。图3中,当有MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP这两个触摸事件发生时,onTouch()方法的返回值是true,表示这两个动作不会再传递给按键进行后续处理,因此再为该Button添加点击监听器(setOnClickListerner)不起作用;如果onTouch()方法对于MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP这两个触摸事件的返回值时false时,表示这两个动作还会传递给按键进行后续处理,此时该Button添加点击监听器就会起作用。
4 代码实现
在onTouch()方法中,有如图4所示的代码。

图4 实现查看密码的代码
其中,et1是与输入密码的输入框关联的变量,setInputType()方法的作用是设置该输入框的属性,当用户开始按压该眼睛按键时,将输入框的“InputType.InputType”属性设置“TYPE_NULL”(图4①),该值的含义是没有指定明确的类型,即取消密码属性,此时的效果如图5所示;当用户结束按压该眼睛按键时,将编辑框的“InputType”属性设置InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD”,即恢复编辑框的密码属性,此时的效果如图6所示。

图5 开始按压眼睛按键

图6 结束按压眼睛按键

1875

被折叠的 条评论
为什么被折叠?



