1. java代码
1 package com.example.qq_login_demo; 2 3 import android.app.Activity; 4 import android.content.SharedPreferences; 5 import android.os.Bundle; 6 import android.util.Log; 7 import android.widget.CompoundButton; 8 import android.widget.Switch; 9 10 import androidx.annotation.Nullable; 11 12 public class PreferenceDemoActivity extends Activity implements CompoundButton.OnCheckedChangeListener { 13 14 private static final String TAG = "PreferenceDemoActivity"; 15 private Switch mIsAllowUnknowScource; 16 private SharedPreferences mSharePreferences; 17 18 @Override 19 protected void onCreate(@Nullable Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_preference_demo); 22 23 // 找到控件 24 mIsAllowUnknowScource = this.findViewById(R.id.is_allow_unknow_apps_sources_switch); 25 mIsAllowUnknowScource.setOnCheckedChangeListener(this); 26 27 // 取得SharePreference,设置取得内容的文件名为"settings_info" 28 mSharePreferences = this.getSharedPreferences("settings_info", MODE_PRIVATE); 29 30 // 取得SharePreference中某个键的值 31 boolean state = mSharePreferences.getBoolean("state", false); 32 33 // 取出之前的设定,使得即使设置后台退出了,也保持当时设置的状态 34 mIsAllowUnknowScource.setChecked(state); 35 36 } 37 38 /** 39 * SharePreference 用于保存偏好设置,比如我们设置里面的条目 40 * 详细教程: https://www.jianshu.com/p/59b266c644f3 41 * 使用步骤: 42 * 43 * 第一步: 拿到这个SharePreference 44 * 代码: mSharePreferences = this.getSharedPreferences("settings_info", MODE_PRIVATE); 45 * 这里面这个this指的是Context, 在视频中我们是在Activity里面所以直接使用this。 46 * 因为这Activity间接的继承了Context(前面的学习中提到过 47 * 48 * 第二步: 进入编辑模式 49 * 代码: SharedPreferences.Editor edit = mSharePreferences.edit(); 50 * 拿到编辑器 51 * 52 * 第三步: 保存数据 53 * edit.putBoolean("state", isChecked); 54 * 保存要保存的数据类型,例如Boolean,int,String等等,保存的内容是键值对 55 * 56 * 第四步: 提交编辑器 57 * edit.commit() 58 * 59 * 经过这四个步骤,就可以把数据保存到SharePreference 60 * 61 * SharePreference存储也是属于这个内部存储, 它跟file/cache也是一样的,在/data/data/包名下/share_prefs 62 * 以xml的文件形式保存起来。它有一个特点,内容保存都是以键值对的形式保存 63 */ 64 65 @Override 66 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 67 // 对数据进行保存 68 Log.d(TAG, "current state == " + isChecked); 69 // // 拿到数据编辑器 70 SharedPreferences.Editor edit = mSharePreferences.edit(); 71 // 保存数据(键值对) 72 edit.putBoolean("state", isChecked); 73 edit.commit(); 74 } 75 }
2. layout定义
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="80dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_centerVertical="true"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="未知来源" android:textColor="#FF4081" android:padding="10dp" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="允许安装未知来源的应用" android:textSize="18sp" android:layout_marginLeft="10dp"/> </LinearLayout> <Switch android:id="@+id/is_allow_unknow_apps_sources_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" /> </RelativeLayout>