Settings 添加一级菜单

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类

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在已有的窗口上增加三级菜单,你可以按照以下步骤进行操作: 1. 在已有的菜单添加一个二级菜单,比如 "Options"。 2. 在 "Options" 菜单添加一个子菜单,比如 "Settings"。 3. 在 "Settings" 菜单下再添加一个子菜单,比如 "Advanced Settings"。 具体的实现方法可以根据你使用的 GUI 工具包或框架来进行调整。如果你使用的是 Python 的 Tkinter 库,可以参考以下代码示例: ```python from tkinter import * # 创建主窗口 root = Tk() # 创建菜单栏 menu_bar = Menu(root) # 添加菜单 file_menu = Menu(menu_bar, tearoff=0) file_menu.add_command(label="Open") file_menu.add_command(label="Save") file_menu.add_separator() file_menu.add_command(label="Exit") menu_bar.add_cascade(label="File", menu=file_menu) # 添加二级菜单 options_menu = Menu(menu_bar, tearoff=0) options_menu.add_command(label="Settings") menu_bar.add_cascade(label="Options", menu=options_menu) # 添加三级菜单 settings_menu = Menu(options_menu, tearoff=0) settings_menu.add_command(label="Advanced Settings") options_menu.add_cascade(label="Settings", menu=settings_menu) # 显示菜单栏 root.config(menu=menu_bar) # 进入消息循环 root.mainloop() ``` 在上面的代码中,我们首先创建了一个菜单栏 `menu_bar`,并添加了一个二级菜单 "Options"。然后在 "Options" 菜单添加了一个子菜单 "Settings",最后在 "Settings" 菜单添加了一个子菜单 "Advanced Settings"。最后,通过 `root.config(menu=menu_bar)` 将菜单栏显示在主窗口中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值