Android中使用PreferenceActivity创建菜单

在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的属性也可以指定

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值