如果你需要一个简单的APP设置,可以使用sharedPreferences进行存储,我们可以借助AndroidStudio快速创建一个用于设置的Activity,其实它是继承PreferenceFragmentCompat,存储方式用的就是sharedPreferences,只是帮我们节省了很多操作
1.新建SettingsActivity
使用AS新建一个SettingsActivity
可以发现它自动生成了一个Activity、一个layout布局和一个xml文件
layout文件很简单,里面就是一个LinearLayout里套FrameLayout,我们不用去修改它
xml文件是使用PreferenceScreen的布局文件,在自动生成Activity文件里的SettingsFragment类引用该xml
2.xml
它默认生成的是root_preferences.xml,里面是PreferenceScreen布局,关于PreferenceScreen 的布局大家可以去网上搜一下,或者去官网看看说明,我这里只是简单举个例子
title:显示的标题
key:存储的键(sharedPreferences取值需要用)
dependency:是否依赖某个组件,被依赖组件启用则当前组件启用
icon:图标
summary:描述
fragment:嵌套fragment(多级页面)
useSimpleSummaryProvider:是否显示值内容
3.Activity监听校验
如果修改了设置可以进行保存,我们需要实现Preference.OnPreferenceChangeListener才能监听改变,比如说校验输入值的合法性
public class SettingsActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.settings_activity);if (savedInstanceState == null) {getSupportFragmentManager().beginTransaction().replace(R.id.settings, new SettingsFragment()).commit();}ActionBar actionBar = getSupportActionBar();if (actionBar != null) {actionBar.setTitle("设置");actionBar.setDisplayHomeAsUpEnabled(true);}}// 点击返回图标事件@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == android.R.id.home) {this.finish();}return super.onOptionsItemSelected(item);}// 接口Preference.OnPreferenceChangeListenerpublic static class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {@Overridepublic void onCreatePreferences(Bundle savedInstanceState, String rootKey) {setPreferencesFromResource(R.xml.root_preferences, rootKey);// 通过xml设置的key找到要监听的项Preference sPEditUsername = findPreference("username");Preference sPEditPassword = findPreference("password");// 设置监听if (sPEditUsername != null) {sPEditUsername.setOnPreferenceChangeListener(this);}if (sPEditPassword != null) {sPEditPassword.setOnPreferenceChangeListener(this);}}// 值发生改变时触发,return值决定是否保存修改,true保存,false不保存@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {String key = preference.getKey();if (key.equals("username")) {...return true; // 保存} else if (key.equals("password")) {...return true;}return false; //不保存}
}
采用的是sharedPreferences的存储方式,所以取值还是很简单的
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean spIsAuth = sharedPreferences.getBoolean("is_auth", false); // 第一个参数是key,第二个是根据key取不到值时的默认值
String spUsername = sharedPreferences.getString("username", "");
String spPassword = sharedPreferences.getString("password", "");