Settings 新增一級選單
阿新 • • 發佈:2018-12-07
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類