上一节对“我”模块(二)进行了综述(可参见 “我”模块(二) 进行了解),接下来将从设置模块开始详细介绍:

  • “我”模块(一)之收藏
  • “我”模块(二)之设置
  • “我”模块(三)之修改密码
  • “我”模块(四)之设置密保

知识点

  • 掌握“收藏”界面的开发,能够实现新闻收藏功能。
  • 掌握“设置”界面的开发,能够设置用户的基本信息。
  • 掌握“修改密码”界面的开发,能够实现密码的修改功能。
  • 掌握“设置密保”界面的开发, 能够实现密保的设置功能。

10. “设置密保”界面

任务分析:
“设置密保”界面主要用于输入要设为密保的姓名,“找回密码”界面可以根据用户当前输入的用户名和设为密保的姓名找回密码,界面效果如图所示。

“设置密保”界面

“找回密码”界面

任务实施:
(1)创建“设置密保”和“找回密码”界面:FindPswActivity & activity_find_psw。

(2)放置界面控件。
2个EditText控件,用于输入用户和姓名;
3个TextView控件,一个用于显示密码(暂时隐藏),其余两个分别用于显示“您的用户名是?”和“您的姓名是?”文字;
1个Button控件作为“验证”按钮。

activity_find_psw.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/register_bg_color"android:orientation="vertical"><include layout="@layout/main_title_bar" /><TextViewandroid:id="@+id/tv_user_name"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="35dp"android:text="您的用户名是?"android:textColor="@color/constellation_info_color"android:textSize="14sp"android:visibility="gone" /><EditTextandroid:id="@+id/et_user_name"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="10dp"android:background="@drawable/find_psw_radius_bg"android:hint="请输入您的用户名"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textCursorDrawable="@null"android:textSize="14sp"android:visibility="gone" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="15dp"android:text="您的姓名是?"android:textColor="@color/constellation_info_color"android:textSize="14sp" /><EditTextandroid:id="@+id/et_validate_name"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="10dp"android:background="@drawable/find_psw_radius_bg"android:hint="请输入要验证的姓名"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textCursorDrawable="@null"android:textSize="14sp" /><TextViewandroid:id="@+id/tv_reset_psw"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="10dp"android:gravity="center_vertical"android:textColor="@android:color/holo_red_light"android:textSize="14sp"android:visibility="gone" /><Buttonandroid:id="@+id/btn_validate"android:layout_width="fill_parent"android:layout_height="35dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="15dp"android:background="@drawable/register_btn_selector"android:text="验证"android:textColor="@android:color/white"android:textSize="16sp" />
</LinearLayout>

(3)创建EditText控件的背景。由于“设置密保”界面的输入框的四个角都是椭圆形,因此在res/drawable中创建一个find_psw_radius_bg.xml文件进行设置。

find_psw_radius_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:radius="5dp" /><solid android:color="#FFFFFF" /><strokeandroid:width="1dp"android:color="@color/register_btn_color" />
</shape>

11. “设置密保”界面逻辑代码

任务分析:
根据任务综述可知,“设置密保”界面和“找回密码”界面使用同一个Activty,该Activity主要是根据从“设置”界面和“登录”界面传递过来的from参数的值判断要跳转到那个界面,若值为security,则处理的是“设置密保”界面,否则处理的就是“找回密码”界面。“设置密保”界面的逻辑主要是将用户输入的姓名保存到SharedPreferences中,“找回密码”界面逻辑主要是将SharedPreferences中用户名对应的原始密码修改为123456。

任务实施:
(1)获取界面控件。在FindPswActivity中创建界面控件的初始化方法init(),用于获取“修改密码”界面所要用到的控件以及设置后退键,“保存”按钮的点击事件。

(2)保存密保。由于“设置密保”界面需要将用户输入的姓名保存到SharedPreferences中,因此需要创建saveSecurity()方法进行保存。

(3)保存初始化密码到SharedPreferences中。在“找回密码”界面创建isExistuserName()方法判断用户输入的用户名是否存在,若存在,则创建readSecurity()方法获取此用户之前设置过的密保,若用户输入的密保和从SharedPreferences中获取的密保一致,则创建savePsw()方法将此用户原来的密码保存为123456(由于原来的密码不能获取明文,因此将此账户的密码重置为初始密码123456)。

FindPswActivity.java

public class FindPswActivity extends AppCompatActivity {private EditText et_validate_name, et_user_name;private Button btn_validate;private TextView tv_main_title;private TextView tv_back;//from为security时是从设置密保界面跳转过来的,否则就是从登录界面跳转过来的private String from;private TextView tv_reset_psw, tv_user_name;private SwipeBackLayout layout;private RelativeLayout rl_title_bar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);layout = (SwipeBackLayout) LayoutInflater.from(this).inflate(R.layout.base, null);layout.attachToActivity(this);setContentView(R.layout.activity_find_psw);//获取从登录界面和设置界面传递过来的数据from = getIntent().getStringExtra("from");init();}/*** 获取界面控件及处理相应控件的点击事件*/private void init() {tv_main_title = (TextView) findViewById(R.id.tv_main_title);tv_back = (TextView) findViewById(R.id.tv_back);tv_back.setVisibility(View.VISIBLE);rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar);rl_title_bar.setBackgroundColor(getResources().getColor(R.color.rdTextColorPress));et_validate_name = (EditText) findViewById(R.id.et_validate_name);btn_validate = (Button) findViewById(R.id.btn_validate);tv_reset_psw = (TextView) findViewById(R.id.tv_reset_psw);et_user_name = (EditText) findViewById(R.id.et_user_name);tv_user_name = (TextView) findViewById(R.id.tv_user_name);if ("security".equals(from)) {tv_main_title.setText("设置密保");} else {tv_main_title.setText("找回密码");tv_user_name.setVisibility(View.VISIBLE);et_user_name.setVisibility(View.VISIBLE);}tv_back.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {FindPswActivity.this.finish();}});btn_validate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String validateName = et_validate_name.getText().toString().trim();if ("security".equals(from)) {   //设置密保if (TextUtils.isEmpty(validateName)) {Toast.makeText(FindPswActivity.this, "请输入要验证的姓名",Toast.LENGTH_SHORT).show();return;} else {Toast.makeText(FindPswActivity.this, "密保设置成功",Toast.LENGTH_SHORT).show();//保存密保到SharedPreferences中saveSecurity(validateName);FindPswActivity.this.finish();}} else {//找回密码String userName = et_user_name.getText().toString().trim();String sp_security = readSecurity(userName);if (TextUtils.isEmpty(userName)) {Toast.makeText(FindPswActivity.this, "请输入您的用户名",Toast.LENGTH_SHORT).show();return;} else if (!isExistUserName(userName)) {Toast.makeText(FindPswActivity.this, "您输入的用户名不存在",Toast.LENGTH_SHORT).show();return;} else if (TextUtils.isEmpty(validateName)) {Toast.makeText(FindPswActivity.this, "请输入要验证的姓名",Toast.LENGTH_SHORT).show();return;}if (!validateName.equals(sp_security)) {Toast.makeText(FindPswActivity.this, "输入的密保不正确",Toast.LENGTH_SHORT).show();return;} else {//输入的密保正确,重新给用户设置一个密码tv_reset_psw.setVisibility(View.VISIBLE);tv_reset_psw.setText("初始密码:123456");savePsw(userName);}}}});}/*** 保存初始化的密码*/private void savePsw(String userName) {String md5Psw = MD5Utils.md5("123456");        //把密码用Md5加密SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit(); //获取编辑器editor.putString(userName, md5Psw);editor.commit();                                  //提交修改}/*** 保存密保到SharedPreferences中*/private void saveSecurity(String validateName) {SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();//获取编辑器editor.putString(UtilsHelper.readLoginUserName(this) + "_security",validateName);             //存入用户对应的密保editor.commit();          //提交修改}/*** 从SharedPreferences中读取密保*/private String readSecurity(String userName) {SharedPreferences sp = getSharedPreferences("loginInfo", Context.MODE_PRIVATE);String security = sp.getString(userName + "_security", "");return security;}/*** 从SharedPreferences中根据用户输入的用户名来判断是否有此用户*/private boolean isExistUserName(String userName) {boolean hasUserName = false;SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);String spPsw = sp.getString(userName, "");if (!TextUtils.isEmpty(spPsw)) {hasUserName = true;}return hasUserName;}
}

(4)修改清单文件。由于“设置密保”界面向右滑动会关闭该界面,因此需要给该界面天透明主题的样式。

        <activityandroid:name=".activity.FindPswActivity"android:theme="@style/AppTheme.TransparentActivity" />

(5)“修改登录”界面。由于点击登录界面上的“忘记密码”文字会跳转到“找回密码”界面,因此在LoginActivity.java中找到onClick()方法,在该方法中的“case R.id.tv_forget_psw:”语句下方添加如下代码:

 case R.id.tv_forget_psw:Intent forget=new Intent(LoginActivity.this,FindPswActivity.class);startActivity(forget);break;

(6)“修改设置”界面逻辑代码。由于点击“设置”界面上的“设置密保”条目会跳转到“设置密保”界面,因此需要找到SettingActivity的init()方法,在该方法中的注释“//跳转到设置密保界面”语句下方添加如下代码:

        //设置密保的点击事件rl_security_setting.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//跳转到设置密保界面Intent intent = new Intent(SettingActivity.this, FindPswActivity.class);intent.putExtra("from", "security");startActivity(intent);}});

27. 设置模块(四)之设置密保相关推荐

  1. 【C#+SQL Server+打印组件】实现电商快递单打印系统 四:快递单设置模块设计(附源码和资源)

    需要源码和资源请点赞关注收藏后评论区留言私信~~~ 一.快递单设置模块概述 快递单设置模块主要用于自定义快递单模样式,用户可以通过快递单设置窗体添加任意样式快递单的模板,并可以根据实际需要随时修改模板 ...

  2. 24. 设置模块(一)之收藏

    上一节对"我"模块(二)进行了综述(可参见 "我"模块(二) 进行了解),接下来将从设置模块开始详细介绍: "我"模块(一)之收藏 &quo ...

  3. WISMO模块GPRS上网设置的过程

    WISMO模块GPRS上网设置的过程 一) AT指令设置部分 (1) AT+CGCLASS="B"置为"B"模式. (2) AT+CGDCONT=1," ...

  4. WPF仿网易云音乐系列(二、歌单创建窗口+登录设置模块)

    老衲牺牲午休时间写博客,都快把自己感动了,-_-!! 之前上一篇随笔,我看了下评论,有部分人说WPF已经凉凉了,这个我觉得,这只是一个达到自己目的的工具而已,只要自己能用这个工具,得心应手的做出自己想 ...

  5. VirtualBox虚拟机网络设置(四种方式)

    VirtualBox是什么 VirtualBox 是一款 x86 虚拟机软件.原由德国innotek公司开发,2008年Sun收购了Innotek,而Sun于2010年被Oracle收购,2010年1 ...

  6. gprs java_WISMO模块GPRS上网设置的过程

    WISMO模块GPRS上网设置的过程一) AT指令设置部分(1) AT+CGCLASS="B"置为"网络 WISMO模块GPRS上网设置的过程 一) AT指令设置部分 ( ...

  7. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)

    转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...

  8. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)...

    转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...

  9. html密保问题设置,QQ密保设置方法_怎么设置QQ密保详细教程【图文】-太平洋电脑网PConline-太平洋电脑网...

    我们都知道在QQ申请成功之后,为了QQ账号的安全,我们可以设置密保问题,当我们下次更改密码的时候就需要输入密保问题才可以更改,这样当QQ被盗的时候,想要更改密码也不是那么的容易,同时也可以保护我们的Q ...

最新文章

  1. jQuery插件开发学习笔记
  2. ElasticSearch之集群原理
  3. Jedis工具类(含分布式锁的调用和释放)
  4. 通过邮箱远程控制电脑
  5. influxdb数据过期_为什么腾讯QQ的大数据平台选择了InfluxDB数据库?
  6. javascript java html_JS入门篇(二):在html中如何使用Javascript
  7. Learnopengl
  8. python怎么读取csv文件-Python读取csv文件(详解版,看了无师自通)
  9. 《An Introduction to Ray Tracing》—— 2.4 Ray/Box Intersection
  10. mali GPU 官网指南
  11. 0302 GDB调试走起【给PHP写插件】
  12. 大学语言c 离线作业,大学语文C离线作业(2013下).doc
  13. EclipseMaven导入Maven项目后在pom.xml出现Missing artifact org.springframework:spring-jdbc:jar:3.2.4.RELEAS
  14. Java 中的 String、StringBuffer、StringBuilder
  15. 修改Visata下的无线网卡(Intel 5100 agn)Mac地址
  16. 事业单位工资计算机公积金计算,求问事业单位住房公积金如何计算
  17. 往word表中写数据
  18. 90个外国英文网站强力推荐 (转)
  19. 杰理之汤姆猫录音变声功能参考【篇】
  20. MIME类型 swfupload 及 php

热门文章

  1. c语言中乘号的作用,c:乘号
  2. 装ubuntu16.04与win10双系统
  3. pycharm安装库出现问题解决方法(狗头)
  4. 婚恋交友小程序开发及解决方案
  5. 设计模式(十六)----结构型模式之代理享元模式
  6. Cesium|xt3d扇形扫描
  7. Ubuntu12.04 屏幕闪烁
  8. 那些靠熬夜水续命的年轻人
  9. win10替换linux系统教程,Win10系统如何安装Linux Mint
  10. qt运行位数 与 opencv 位数的关系