25. 设置模块(二)之设置

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

知识点

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

设置

任务综述:
“设置”界面主要包含“修改密码”“设置密保”“退出登录”等功能。当用户点击“修改密码”时会跳转到“修改密码”界面,当用户点击“设置密保”时会跳转到“设置密保”界面,当点击“退出登录”时会退出当前登录的账号。

6. “设置”界面

任务分析:
根据任务综述可知,“设置”界面有三个功能,分别为修改密码、设置密保和退出登录,界面效果如图所示。

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>

7. “设置”界面逻辑代码

任务分析:
在“设置”界面中添加点击事件,当点击“修改密码”时会跳转到“修改密码”界面,当点击“设置密保”时跳转到“设置密保”界面,当点击“退出登录”时清除登录状态和用户名,并且将退出的状态传递到“我”界面。

任务实施:
(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;