在Android中可以通过使用PreferenceActivity来设置菜单项,程序所设置的参数将会保存在
/data/data/<应用程序包名>/shared_prefs
下,文件名为<应用程序包名>_preferences.xml
的Preference文件中,通过这种方式可以很快捷的指定程序的设置界面并直接生成配置参数文件
实现:
1.创建一个类并继承自PreferenceActivity,并重写其onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
方法
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
2.重写onBuildHeaders(List<Header> target)
方法并在onBuildHeaders(List<Header> target)
加载设置界面布局文件
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
//加载菜单项布局文件
loadHeadersFromResource(R.xml.setting,target);
}
3.在设置布局文件中添加设置项
- R.xml.setting文件
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 指定启动指定PreferenceFragment的列表项 -->
<header
android:fragment="top.helloworldes.window.Setting$fragmentMessage"
android:title="消息"
android:icon="@mipmap/ic_launcher"
android:summary="消息提醒" />
<header
android:title="我的账号"
android:icon="@mipmap/ic_launcher" />
<header
android:fragment="top.helloworldes.window.Setting$fragementMore"
android:title="通用"
android:icon="@mipmap/ic_launcher" />
<header android:title="关于" />
<!-- 使用Intent启动指定Activity的列表项 -->
<header
android:icon="@drawable/ic_settings_display"
android:title="使用Intent"
android:summary="使用Intent启动某个Activity">
<intent android:action="android.intent.action.VIEW"
android:data="http://www.crazyit.org" />
</header>
</preference-headers>
4.在代码中处理子菜单的Fragment并为Fragment加载资源文件
//验证Fragment有效
protected boolean isValidFragment(String fragmentName) {
return true;
}
public static class fragmentMessage extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载菜单资源文件
addPreferencesFromResource(R.xml.menumessage);
}
}
public static class fragementMore extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.menumore);
}
}
5.设置子菜单资源文件
- R.xml.menumessage文件
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="消息">
<SwitchPreference
android:title="接受新消息通知"
android:summaryOn="接受新消息"
android:summaryOff="不接受新消息"
android:defaultValue="true"
android:key="ReceiveNewMessage" />
<SwitchPreference
android:title="通知显示消息详情"
android:summaryOn="关闭后,将不显示消息和内容详情"
android:summaryOff="开启后,将会显示消息和内容详情"
android:defaultValue="true"
android:key="ShowMessageDetail" />
</PreferenceCategory>
<Preference android:title="通知栏" />
<PreferenceScreen
android:title="声音"
android:summary="设置声音" />
<Preference android:title="振动" />
<Preference android:title="呼吸灯" />
<PreferenceCategory
android:title="桌面">
<SwitchPreference
android:title="桌面未读数字"
android:defaultValue="true"
android:key="DesktopUnreadNumber"/>
<SwitchPreference
android:title="锁屏消息弹框"
android:defaultValue="true"
android:key="MessageWindow" />
<ListPreference
android:title="ListPreference"
android:key="ListPreference"
android:summary="列表菜单"
android:dialogTitle="对话框标题"
android:entries="@array/entries_list_key"/>
</PreferenceCategory>
<MultiSelectListPreference
android:title="MultSelectListPreference"
android:key="Multi"
android:summary="多选菜单项"
android:entries="@array/multientries"
android:entryValues="@array/mutivalues"
/> android:entryValues="@array/entries_list_values" />
</PreferenceScreen>
- 菜单项的Array中对应的键和值
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="entries_list_key">
<item>第1项键</item>
<item>第2项键</item>
<item>第3项键</item>
<item>第4项键</item>
</string-array>
<string-array name="entries_list_values">
<item>第1项值</item>
<item>第2项值</item>
<item>第3项值</item>
<item>第4项值</item>
</string-array>
<string-array name="multientries">
<item>第1项多选键</item>
<item>第2项多选键</item>
<item>第3项多选键</item>
<item>第4项多选键</item>
</string-array>
<string-array name="mutivalues">
<item>第1项多选值</item>
<item>第2项多选值</item>
<item>第3项多选值</item>
<item>第4项多选值</item>
</string-array>
</resources>
6.在Androidmanifest.xml文件中添加设置Activity
<activity android:name=".PreferenceActivityTest"
android:label="设置程序参数">
</activity>
7.启动该Activity即可实现菜单功能
startActivity(new Intent(MainActivity.this,Setting.class));
菜单项
- PreferenceScreen 根元素
- PreferenceCategory 参数组,可以在其内在添加各种设置项形成一个设置组
- CheckBoxPreference复选框,添加CheckBox用于勾选
- EditTextPreference文本框,会弹出Dialog用于输入内容
- ListPreference 列表框,会弹出Dialog用于选择单选选项
- MultSelectListPreference 多选框,弹出Dialog用于选择多选内容
- RingtonePreference 铃声选择器
- SwitchPreference 开关,用于打开或者关闭
菜单项属性
<!--指定启动Fragment-->
<!--启动Fragment-->
android:fragment="packageName$PrefsFragment"
<!--设置图标-->
android:icon="@drawable/ic_settings_applications"
<!--设置菜单标题-->
android:title="程序选项设置"
<!--设置菜单描述-->
android:summary="设置应用的相关选项" />
<!--设置intent用于启动其他Activity-->
<intent android:action="android.intent.action.VIEW" android:data="http://www.baidu.com" />
<!--设置默认为选中-->
android:showDefault="true"
<!--设置在配置文件中的Key-->
android:key="ring_key"
<!--设置弹出的对话框标题-->
android:dialogTitle="ListPreference"
<!--设置列表项的属性名称-->
android:entries="@array/gender_name_list"
<!--设置列表项的属性的值-->
android:entryValues="@array/gender_value_list"
<!--设置当属性为true时显示的描述-->
android:summaryOn="自动保存: 开启"
<!--设置当属性为false时显示的描述-->
android:summaryOff="自动保存: 关闭"
在设置参数时对应的Dialog和EditText的属性也可以指定