Android中使用PreferenceActivity创建菜单
16lz
2021-01-24
在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的属性也可以指定
更多相关文章
- 破解Xamarin
- Android(安卓)make脚本简记
- Android(安卓)SDK Manager中Google APIs无法显示问题(附SDK Manag
- unity obb 分包 上传googleplay
- Android美工坊--底部菜单栏实现
- Android(安卓)Cupcake源码编译笔记
- Android简明开发教程十四:Context Menu 绘制几何图形
- 解决Android(安卓)4.2.2 脱机(offline)问题
- Android(安卓)中文翻译:Build System Overview