在一些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 点击打开链接