Android针对保存用户设置的设计

在一些App里面总会保存一些用户自己的一些设定,比如一些背景音乐的播放,是否定时提醒。在最近学习的过程里面我总结了一下,心里面也有了自己的一些想法。通过之前讲的一个建立多个Activiyy可读取的共享数据的类和SharedPreferences来实现,可以阅读这篇文章点击打开链接。在类里面我们可以设定几个私有变量,将接口暴露给外部,提供一个安全的模式来进行操作。

其中我写了一个例子如下:


这个例子模仿了用户设置自定义设定时候的情景,具体代码如下

1、选项界面的XML代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_option"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/startup_bkg_gray"
    tools:context="com.example.app_damaoxian.Activity_option">
    <ImageView
        android:src="@drawable/startup_frame"
        android:scaleType="centerInside"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:id="@+id/imageView" />

    <ImageView
        android:id="@+id/iv_sound"
        android:scaleType="centerInside"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_width="75dp"
        android:layout_height="33dp"
        android:src="@drawable/option_lbl_sound_zh"/>
    <ImageView
        android:id="@+id/music"
        android:scaleType="centerInside"
        android:layout_width="75dp"
        android:layout_height="33dp"
        android:src="@drawable/option_lbl_music_zh"
        android:layout_below="@+id/iv_sound"
        android:layout_alignEnd="@+id/iv_sound"
        android:layout_marginTop="25dp" />

    <ImageView
        android:id="@+id/background0"
        android:layout_centerVertical="true"
        android:scaleType="centerInside"
        android:layout_width="140dp"
        android:layout_height="150dp"
        android:src="@drawable/startup_photo_border"
        android:layout_marginRight="20dp"
        android:layout_alignBottom="@+id/music"
        android:layout_toStartOf="@+id/music"
        android:layout_marginEnd="25dp" />

    <ImageView
        android:id="@+id/opion"
        android:scaleType="centerInside"
        android:layout_width="140dp"
        android:layout_height="67dp"
        android:src="@drawable/startup_lbl_option_zh"
        android:layout_above="@+id/iv_sound"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"/>

    <CheckBox
        android:id="@+id/cb_sound"
        android:layout_width="98dp"
        android:layout_height="45dp"
        android:button="@null"
        android:checked="true"
        android:background="@drawable/background_checkbox"
        android:layout_below="@+id/opion"
        android:layout_toEndOf="@+id/iv_sound" />

    <CheckBox
        android:id="@+id/cb_music"
        android:layout_width="98dp"
        android:layout_height="45dp"
        android:checked="true"
        android:button="@null"
        android:background="@drawable/background_checkbox"
        android:layout_alignTop="@+id/music"
        android:layout_toEndOf="@+id/music" />

    <ImageView
        android:id="@+id/iv_goback"
        android:layout_width="100dp"
        android:layout_height="60dp"
        android:clickable="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/background_goback"
        android:layout_below="@+id/cb_music"
        android:layout_toEndOf="@+id/background0" />

    <ImageView
        android:id="@+id/setting"
        android:scaleType="centerInside"
        android:layout_width="85dp"
        android:layout_height="85dp"
        android:src="@drawable/option_gear"
        android:layout_marginLeft="10dp"
        android:layout_below="@+id/opion"
        android:layout_toStartOf="@+id/opion"
        android:layout_marginEnd="21dp" />
</RelativeLayout>
2、选项菜单Activity的java代码,其中有读取自定义共享数据类的代码。

package com.example.app_damaoxian;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class Activity_option extends AppCompatActivity {
    private CheckBox cb_sound,cb_music;
    private ImageView iv_goback;
    private App_Data app_data;
    private RelativeLayout relativeLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_option);
        relativeLayout=(RelativeLayout)findViewById(R.id.activity_option);
        relativeLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        app_data=(App_Data)getApplication();
        initView();
        initData();
    }
    void initView(){
        /**
         * 音效和背景音乐的开关接口
         * 写入数据模块
         */
        cb_sound=(CheckBox)findViewById(R.id.cb_sound);
        cb_music=(CheckBox)findViewById(R.id.cb_music);
        cb_sound.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (cb_sound.isChecked()){
                    if (app_data.writeStateSoundCheckbox(true)){
                        Toast.makeText(Activity_option.this, "声音已开启", Toast.LENGTH_SHORT).show();

                    }
                }
                else {
                    if (app_data.writeStateSoundCheckbox(false)){
                        Toast.makeText(Activity_option.this, "声音已关闭", Toast.LENGTH_SHORT).show();

                    }
                }
            }
        });
        cb_music.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (cb_music.isChecked()){
                    if (app_data.writeStateMusicCheckbox(true)){
                        Toast.makeText(Activity_option.this, "背景音乐已开启", Toast.LENGTH_SHORT).show();
                    }
                }
                else {
                    if (app_data.writeStateMusicCheckbox(false)){
                        Toast.makeText(Activity_option.this, "背景音乐已关闭", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        iv_goback=(ImageView)findViewById(R.id.iv_goback);
        iv_goback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                overridePendingTransition(R.animator.fragment_in,R.animator.fragment_out);
            }
        });
    }

    /**
     * 初始化CheckBox的状态
     */
    void initData(){
        if (app_data.readStateSoundCheckbox()){
            cb_sound.setChecked(true);
            Toast.makeText(Activity_option.this, "声音已开启", Toast.LENGTH_SHORT).show();
        }else {
            cb_sound.setChecked(false);
            Toast.makeText(Activity_option.this, "声音已关闭", Toast.LENGTH_SHORT).show();
        }
        if (app_data.readStateMusicCheckbox()){
            cb_music.setChecked(true);
            Toast.makeText(Activity_option.this, "背景音乐已开启", Toast.LENGTH_SHORT).show();
        }else {
            cb_music.setChecked(false);
            Toast.makeText(Activity_option.this, "背景音乐已关闭", Toast.LENGTH_SHORT).show();
        }
    }

}

3、自定义的数据共享类App_Data,其中给外部暴露了许多方法,实现了对私有变量的读写。

package com.example.app_damaoxian;

import android.app.Application;
import android.content.SharedPreferences;

/**
 * Created by 尽途 on 2017/4/17.
 */

public class App_Data extends Application {
    private SharedPreferences.Editor checkEditor;
    private SharedPreferences sharedPreferences;
    private boolean isChecked_Sound,isChecked_Music;
    @Override
    public void onCreate() {
        super.onCreate();
        initData();
    }
    /**
     *初始化一定的数据变量
     */
    private void initData(){
        sharedPreferences=getSharedPreferences("checkBox",MODE_PRIVATE);
        checkEditor=getSharedPreferences("checkBox",MODE_PRIVATE).edit();
    }
    public boolean readStateSoundCheckbox(){
        isChecked_Sound=sharedPreferences.getBoolean("ischeckedSound",true);
        return isChecked_Sound;
    }
    public boolean writeStateSoundCheckbox(boolean bool){
        checkEditor.putBoolean("ischeckedSound",bool);
        return checkEditor.commit();
    }
    public boolean readStateMusicCheckbox(){
        isChecked_Music=sharedPreferences.getBoolean("ischeckedMusic",true);
        return isChecked_Music;
    }
    public boolean writeStateMusicCheckbox(boolean bool){
        checkEditor.putBoolean("ischeckedMusic",bool);
        return checkEditor.commit();
    }

}
4、AndroidManifest.xml代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app_damaoxian">

    <application
        android:name=".App_Data"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Fragment_GameMenuActivity"
            android:screenOrientation="landscape" />
        <activity
            android:name=".Activity_option"
            android:screenOrientation="landscape" />
        <activity android:name=".Activity_game_0_0"
            android:screenOrientation="landscape"></activity>
    </application>

</manifest>

该项目上传至Github 欢迎star https://github.com/zqljintu/qiguaidedamaoxian 点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值