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类
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)