25. 设置模块(二)之设置
上一节对欢迎模块进行了综述(可参见 “我”模块(二) 进行了解),接下来将从设置模块开始详细介绍:
- [“我”模块(一)之收藏]
- [“我”模块(二)之设置]
- [“我”模块(三)之修改密码]
- [“我”模块(四)之设置密保]
知识点
- 掌握“收藏”界面的开发,能够实现新闻收藏功能。
- 掌握“设置”界面的开发,能够设置用户的基本信息。
- 掌握“修改密码”界面的开发,能够实现密码的修改功能。
- 掌握“设置密保”界面的开发, 能够实现密保的设置功能。
设置
任务综述:
“设置”界面主要包含“修改密码”“设置密保”“退出登录”等功能。当用户点击“修改密码”时会跳转到“修改密码”界面,当用户点击“设置密保”时会跳转到“设置密保”界面,当点击“退出登录”时会退出当前登录的账号。
“设置”界面
任务分析:
根据任务综述可知,“设置”界面有三个功能,分别为修改密码、设置密保和退出登录,界面效果如图所示。

任务实施:
(1)创建“设置”界面:SettingActivity & activity_setting。
(2)放置界面控件。
5个View控件,用于显示5条灰色分割线;
2个ImageView控件用于显示右边的箭头图片;
3个TextView控件用于显示界面文字(修改密码、设置密保和退出登录)。
activity_setting.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" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="15dp"
android:background="#E3E3E3" />
<RelativeLayout
android:id="@+id/rl_modify_psw"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#F7F8F8"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="修改密码"
android:textColor="#A3A3A3"
android:textSize="14sp" />
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/iv_right_arrow" />
</RelativeLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#E3E3E3" />
<RelativeLayout
android:id="@+id/rl_security_setting"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#F7F8F8"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="设置密保"
android:textColor="#A3A3A3"
android:textSize="14sp" />
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/iv_right_arrow" />
</RelativeLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#E3E3E3" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="15dp"
android:background="#E3E3E3" />
<RelativeLayout
android:id="@+id/rl_exit_login"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#F7F8F8"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="退出登录"
android:textColor="#A3A3A3"
android:textSize="14sp" />
</RelativeLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#E3E3E3" />
</LinearLayout>
“设置”界面逻辑代码
任务分析:
在“设置”界面中添加点击事件,当点击“修改密码”时会跳转到“修改密码”界面,当点击“设置密保”时跳转到“设置密保”界面,当点击“退出登录”时清除登录状态和用户名,并且将退出的状态传递到“我”界面。
任务实施:
(1)获取界面控件。在SettingActivity中创建界面控件的初始化方法init(),用于获取“设置”界面所要用到的控件以及设置后退键、修改密码、设置密保和退出登录的点击事件。
SettingActivity.java
public class SettingActivity extends AppCompatActivity {
private TextView tv_main_title, tv_back;
private RelativeLayout rl_title_bar;
private RelativeLayout rl_modify_psw, rl_security_setting, rl_exit_login;
public static SettingActivity instance = null;
private SwipeBackLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
layout = (SwipeBackLayout) LayoutInflater.from(this).inflate(
R.layout.base, null);
layout.attachToActivity(this);
setContentView(R.layout.activity_setting);
instance = this;
init();
}
private void init() {
tv_main_title = (TextView) findViewById(R.id.tv_main_title);
tv_main_title.setText("设置");
tv_back = (TextView) findViewById(R.id.tv_back);
rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar);
rl_title_bar.setBackgroundColor(getResources().getColor(R.color.
rdTextColorPress));
rl_modify_psw = (RelativeLayout) findViewById(R.id.rl_modify_psw);
rl_security_setting = (RelativeLayout) findViewById(R.id.rl_security_setting);
rl_exit_login = (RelativeLayout) findViewById(R.id.rl_exit_login);
tv_back.setVisibility(View.VISIBLE);
tv_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SettingActivity.this.finish();
}
});
//修改密码的点击事件
rl_modify_psw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//跳转到修改密码的界面
Intent intent = new Intent(SettingActivity.this, ModifyPswActivity.class);
startActivity(intent);
}
});
//设置密保的点击事件
rl_security_setting.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//跳转到设置密保界面
Intent intent = new Intent(SettingActivity.this, FindPswActivity.class);
intent.putExtra("from", "security");
startActivity(intent);
}
});
//退出登录的点击事件
rl_exit_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(SettingActivity.this, "退出登录成功",
Toast.LENGTH_SHORT).show();
//清除登录状态和登录时的用户名
UtilsHelper.clearLoginStatus(SettingActivity.this);
//退出登录成功后把退出成功的状态传递到MainActivity中
Intent data = new Intent();
data.putExtra("isLogin", false);
setResult(RESULT_OK, data);
SettingActivity.this.finish();
}
});
}
}
(2)清除SharedPreferences中的登录状态和登录时的用户名。由于点击“退出登录”时需要清除SharedPreferences中的登录状态和登录时的用户名,因此需要在utils包中的UtilsHelper类中创建一个clearLoginStatus()方法以实现此功能。
/**
* 清除SharedPreferences中的登录状态和登录时的用户名
*/
public static void clearLoginStatus(Context context){
SharedPreferences sp=context.getSharedPreferences("loginInfo", Context.
MODE_PRIVATE);
SharedPreferences.Editor editor=sp.edit(); //获取编辑器
editor.putBoolean("isLogin", false); //清除登录状态
editor.putString("loginUserName", ""); //清除用户名
editor.commit(); //提交修改
}
(3)修改清单文件。由于“设置”界面向右滑动会关闭该界面,因此需要给该界面添加透明主题的样式。
<activity
android:name=".activity.SettingActivity"
android:theme="@style/AppTheme.TransparentActivity" />
(4)修改“我”界面逻辑代码。由于点击“我”界面上的设置条目时会跳转到“设置”界面,因此需要在MeFragment中找到onClick()方法中的注释“//跳转到设置界面”语句下方添加如下代码:
case R.id.rl_setting:
if (isLogin) {
//跳转到设置界面
Intent settingIntent = new Intent(getActivity(), SettingActivity.class);
startActivityForResult(settingIntent, 1);
} else {
Toast.makeText(getActivity(), "您还未登录,请先登录",
Toast.LENGTH_SHORT).show();
}
break;