Android设置Settings实现:PreferenceActivity(1)
16lz
2021-01-25
Android的设置Settings功能比较常见,通常可以考虑使用PreferenceActivity实现。
其中需要的数组资源citys在res/values中的arrays.xml中定义好:
在res/values中的strings.xml:
PreferenceActivity需要从res/xml加载(addPreferencesFromResource)一个定义好的Preference的xml文件。比如preferences.xml:
<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@string/title_1" > <ListPreference android:dialogTitle="请选择城市" android:entries="@array/citys" android:entryValues="@array/citys_code" android:key="@string/listpreference_key" android:summary="@string/listpreference_summary" android:title="@string/listpreference_title" /> </PreferenceCategory> <PreferenceCategory android:title="@string/title_2" > <EditTextPreference android:defaultValue="缺省" android:key="@string/editpreference_key" android:summary="@string/editpreference_summary" android:title="@string/editpreference_title" /> <CheckBoxPreference android:defaultValue="false" android:key="@string/checkbox_key" android:summary="@string/checkbox_summary" android:title="@string/checkbox_title" /> </PreferenceCategory> <!-- 点击将浏览和打开网页 --> <Preference android:summary="http://www.baidu.com" android:title="浏览网页" > <intent android:action="android.intent.action.VIEW" android:data="http://www.baidu.com" > </intent> </Preference> <!-- 此处将跳转到下一屏设置 --> <PreferenceScreen android:key="preference_screen_2_key" android:persistent="false" android:title="PreferenceScreen 2" > <EditTextPreference android:defaultValue="缺省值2" android:key="edit_text_key_2" android:summary="edit summary" android:title="edit text 2" /> </PreferenceScreen></PreferenceScreen>
其中需要的数组资源citys在res/values中的arrays.xml中定义好:
<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="citys"> <item>成都</item> <item>北京</item> <item>上海</item> </string-array> <string-array name="citys_code"> <item>028</item> <item>010</item> <item>021</item> </string-array></resources>
在res/values中的strings.xml:
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">PreferenceScreen</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="title_1">第一组</string> <string name="title_2">第二组</string> <string name="title_3">第三组</string> <string name="editpreference_title">EditText_title</string> <string name="editpreference_summary">文本输入框</string> <string name="editpreference_key">editpreference_key</string> <string name="checkbox_title">CheckBox_title</string> <string name="checkbox_summary">选项框</string> <string name="checkbox_key">checkbox_key</string> <string name="listpreference_title">ListPreference_title</string> <string name="listpreference_key">ListPreference_key</string> <string name="listpreference_summary">下拉菜单</string></resources>
java代码:
package com.example.preferencescreen;import android.content.SharedPreferences;import android.content.SharedPreferences.OnSharedPreferenceChangeListener;import android.os.Bundle;import android.preference.EditTextPreference;import android.preference.ListPreference;import android.preference.Preference;import android.preference.PreferenceActivity;import android.preference.PreferenceManager;import android.preference.PreferenceScreen;import android.util.Log;import android.widget.Toast;public class ActivityB extends PreferenceActivity {private final String LIST_KEY = "ListPreference_key";private final String EDITPREFERENCE_KEY = "editpreference_key";private EditTextPreference mEditText;private ListPreference list;private OnSharedPreferenceChangeListener mOnSharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {if (key.equals(EDITPREFERENCE_KEY)) {// 更新String s = sharedPreferences.getString(EDITPREFERENCE_KEY, "null");mEditText.setSummary(s);}if (key.equals(LIST_KEY)) {String value = list.getValue();String entry = list.getEntry() + "";// list.setSummary(value);if (value.equals("028")) {Toast.makeText(getApplicationContext(), "当前选择的是成都", Toast.LENGTH_SHORT).show();} else if (value.equals("010")) {Toast.makeText(getApplicationContext(), "当前选择的是北京", Toast.LENGTH_SHORT).show();} else if (value.equals("021")) {Toast.makeText(getApplicationContext(), "当前选择的是上海", Toast.LENGTH_SHORT).show();}}}};@Overrideprotected void onResume() {super.onResume();getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);}@Overrideprotected void onPause() {super.onPause();getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);}// 那一个设置选项栏被触发@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {return false;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通用的读取设置的某个值的方法SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);String editPreference_text = sharedPreferences.getString(EDITPREFERENCE_KEY, "暂时为空");Log.d("editPreference_text", editPreference_text);// 添加设置的选项this.addPreferencesFromResource(R.xml.preference);// 预读取。为PreferenceActivity中的某个设置选项初始化值mEditText = (EditTextPreference) findPreference(EDITPREFERENCE_KEY);mEditText.setSummary(editPreference_text);list = (ListPreference) findPreference(LIST_KEY);// 注册添加设置的项数据发生变化时候的监听sharedPreferences.registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);}}
更多相关文章
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- [置顶] Android(安卓)菜单:OptionMenu 介绍
- Android:APK签名
- Java GC & Android(安卓)GC学习索引
- android TabHost简单使用
- 翻译引用 android的按键响应
- 使用ndk开发android 5.0 平台错误处理(1)
- Android(安卓)libav移植
- Android(安卓)Studio 的build variants 没有 test artifact问题