
2.2 设置密码
手机防盗模块对于用户来说是一个较为隐私的功能,不能让其他人随意查看,因此必须要设置一个密码来对该模块进行保护。本节将针对设置密码功能进行详细讲解。
2.2.1 设置密码界面
设置防盗密码是进入手机防盗模块的一个入口,两次密码输入一致时,程序会自动保存输入的密码并弹出输入密码对话框。设置防盗密码界面布局主要有两个EditText和两个Button按钮,以及用于显示线条的View控件,设置密码对话框的图形化界面如图2-7所示。
图2-7所示设置密码对话框的布局文件如【文件2-1】所示。

图2-7 设置密码对话框
【文件2-1】setup_password_dialog.xml



由于设置密码对话框和输入密码对话框的布局风格一致,因此可以使用shape属性自定义对话框的样式。在drawable目录中创建一个xml文件,设置标签为shape,在该文件中定义对话框的圆角以及颜色,并通过“android:background="@drawable/coner_bg_white"”将自定义属性设置到LinearLayout上。设置密码对话框的自定义属性如【文件2-2】所示。
【文件2-2】res/drawable/coner_bg_white.xml

上述文件中的<shape>标签用于设置形状,它有六个子标签,分别为<corners>、<solid>、<gradient>、<padding>、<size>、<stroke>。其中<corners>用于表示圆角,android:radius="6.0dp"属性用于指定圆角的半径。<solid>用于指定填充颜色,android:color="#ffffff"表示颜色为白色。
2.2.2 自定义对话框样式
在Android系统中,自带的对话框通常是一个灰色的并带有标题栏和按钮,由于这种对话框样式在当前界面使用并不美观,因此需要自定义对话框样式。具体代码如【文件2-3】所示。
【文件2-3】res/values/styles.xml

上述代码中,第一个Item表示去掉边框,第二个Item表示无标题栏,第三个表示背景颜色为黑色,第四个Item表示对话框背景透明。
2.2.3 设置密码逻辑
设置防盗密码对话框的UI编写完成后,接下来编写设置密码对话框的逻辑类,该类继承自Dialog,主要用于初始化控件以及响应按钮的点击事件。具体代码如【文件2-4】所示。
【文件2-4】SetUpPasswordDialog.java


代码说明:
●第11~13行的SetUpPasswordDialog()方法为构造方法,在该方法中通过super(context,R.style.dialog_custom)引入自定义对话框样式dialog_custom。
●第14~16行的setCallBack()方法定义了一个回调函数setCallBack(MyCallBack myCallBack)传递一个MyCallBack接口;
●第35~39行的setTitle()方法用于设置输入密码对话框的标题栏;
●第41~50行的onClick()方法用于响应按钮的点击事件,当点击确定按钮时调用MyCallBack中的ok()方法,点击取消按钮时调用cancle()按钮;
●第51~54行的MyCallBack()方法定义一个MyCallBack接口,该接口中有两个方法分别用于处理按钮的确定与取消。
2.2.4 MD5加密算法
为了保证账户安全,在保存用户密码时,通常会采用MD5加密算法,这种算法是不可逆的,具有一定的安全性。由于加密算法功能比较独立,因此将其抽取出作为工具类单独存放,具体代码如【文件2-5】所示。
【文件2-5】MD5Utils.java

至此,设置防盗密码的UI以及基本逻辑代码已经完成,在HomeActivity中进行调用即可。