Settings 添加一级菜单

本文详细介绍如何在Android系统设置应用中创建一级菜单,包括通过Activity和Fragment两种方式的实现步骤,以及清单文件中必要的配置项说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Settings添加一级菜单:

1、一级菜单项的实现是Activity

     例如MySettings.java,此类文件直接继承的是Activity,添加比较简单

(1)在清单文件中添加如下内容    

<activity android:name="MySettings"
                android:label="@string/my_settings_title"
                android:icon="@drawable/my_settings_ic"
                android:taskAffinity="">
            <intent-filter android:priority="1">
                <action android:name="com.android.settings.MYSETTINGS" />
                <action android:name="android.settings.MYSETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
                <category android:name="com.android.settings.SHORTCUT" />
            </intent-filter>
            <intent-filter android:priority="9">//在category中的物理位置(按优先级排序时用到,并不是指第9个位置,数越大优先级越大越靠前)
                <action android:name="com.android.settings.action.SETTINGS" />//指定此项在settings中显示
            </intent-filter>
            <meta-data android:name="com.android.settings.ia.homepage"
                android:value="com.android.settings.category.device" />//指定此项显示在主页一级菜单这一category中
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>

(2)自己实现MySettings这个Activity,其中是具体功能逻辑的实现

2、一级菜单项的实现是fragment

(1)在清单文件中添加如下内容 

<activity android:name=".Settings$MySettingsActivity"   //注意此处,MySettingsActivity是Settings的内部类,后面会解释
                android:label="@string/my_settings_title"
                android:icon="@drawable/my_settings_ic"
                android:taskAffinity="">
            <intent-filter android:priority="1">
                <action android:name="com.android.settings.My_SETTING" />
                <action android:name="android.settings.My_SETTING" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
                <category android:name="com.android.settings.SHORTCUT" />
            </intent-filter>
            <intent-filter android:priority="9">
                <action android:name="com.android.settings.action.SETTINGS" />
            </intent-filter>
            <meta-data android:name="com.android.settings.category"
                android:value="com.android.settings.category.ia.homepage" />
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"//FRAGMENT_CLASS 表明value指定的类是fragment
                android:value="com.android.settings.MySettings" /> //MySettings实现类
            
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>

(2)自己实现MYSettings 这个fragment

(3)在Settings.java中添加

 public static class MySettingsActivity extends SettingsActivity { /* empty */ }

 MySettingsActivity 并不是一个Activity文件,只是一个SettingsActivity的子类,且是空实现。之所以要加此空的Activity,是为了外部应用能直接跳转到MySettingsActivity界面,因为如果只是fragment的话,外部是没法跳转到fragment界面的,跳转到MySettingsActivity时,会执行其父类SettingsActivity.java中的方法,并根据MySettingsActivity在清单文件中的注册信息, 它的meta-data的值,找到MySettingsActivity对应的fragment(MySettings),显示出fragment界面,实现借壳。

如果<meta-data>中使用的是FRAGMENT_CLASS,一般都会声明成Settings的内部类即

 <activity android:name="Settings$xxxActivity" > 的形式。   

注意此fragment是继承与settings中通用的SettingsPreferenceFragment,并不是一般的fragment类

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值