![Android项目实战:手机安全卫士](https://wfqqreader-1252317822.image.myqcloud.com/cover/676/31728676/b_31728676.jpg)
2.2 设置密码
手机防盗模块对于用户来说是一个较为隐私的功能,不能让其他人随意查看,因此必须要设置一个密码来对该模块进行保护。本节将针对设置密码功能进行详细讲解。
2.2.1 设置密码界面
设置防盗密码是进入手机防盗模块的一个入口,两次密码输入一致时,程序会自动保存输入的密码并弹出输入密码对话框。设置防盗密码界面布局主要有两个EditText和两个Button按钮,以及用于显示线条的View控件,设置密码对话框的图形化界面如图2-7所示。
图2-7所示设置密码对话框的布局文件如【文件2-1】所示。
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00042001.jpg?sign=1739677268-7GX9Ls6u1sFMLbWeu9HrQwhfRdxMyGOx-0-ce8ec779c971726d3cc9d81cfad88dfe)
图2-7 设置密码对话框
【文件2-1】setup_password_dialog.xml
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00042002.jpg?sign=1739677268-UF3mKWVVCMNJ82kA1kgfRSNj8iPhaHfX-0-064a0d2da91f62bda0b0381972296327)
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00043001.jpg?sign=1739677268-2LFXoB74St9yzBJtdrd6WujbzFnwBJ9X-0-ff35cfaa4c6fea1a33afacd350b3e3a8)
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00044001.jpg?sign=1739677268-BBpGap8Gp3hDFPGmIi5be9Ls0g96wZPf-0-2971ba7e785e2eddf76ca1d7f9297df2)
由于设置密码对话框和输入密码对话框的布局风格一致,因此可以使用shape属性自定义对话框的样式。在drawable目录中创建一个xml文件,设置标签为shape,在该文件中定义对话框的圆角以及颜色,并通过“android:background="@drawable/coner_bg_white"”将自定义属性设置到LinearLayout上。设置密码对话框的自定义属性如【文件2-2】所示。
【文件2-2】res/drawable/coner_bg_white.xml
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00044002.jpg?sign=1739677268-ElqjGokwJSd9INRXJMLFrHe0UdCHw505-0-dfbcfb01ac66fbe36e738e822f9798f6)
上述文件中的<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
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00045001.jpg?sign=1739677268-sUuB1y9HT5YyxpEpzTsnGM0s7OuZx4Sc-0-0132947d81ca70c80c156dd59379f736)
上述代码中,第一个Item表示去掉边框,第二个Item表示无标题栏,第三个表示背景颜色为黑色,第四个Item表示对话框背景透明。
2.2.3 设置密码逻辑
设置防盗密码对话框的UI编写完成后,接下来编写设置密码对话框的逻辑类,该类继承自Dialog,主要用于初始化控件以及响应按钮的点击事件。具体代码如【文件2-4】所示。
【文件2-4】SetUpPasswordDialog.java
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00045002.jpg?sign=1739677268-IpLW7vqNdg53FTxbBv2AJmcSE3VIthHJ-0-69b852147901643bf67cf160a1d6d06e)
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00046001.jpg?sign=1739677268-9BccXkVz8YN9YVBt2RJ6OlC4JPOip0EK-0-0832fa0194a6f220ce2351b931d7e58b)
代码说明:
●第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
![](https://epubservercos.yuewen.com/42DD75/17180239704450606/epubprivate/OEBPS/Images/img00047001.jpg?sign=1739677268-GpVALrbC2eE9299Rt9Ge3Gv0yWVJ3SD0-0-28c41d725813349e542b22878f62d2a8)
至此,设置防盗密码的UI以及基本逻辑代码已经完成,在HomeActivity中进行调用即可。