android Settings 分析

转载 2016年05月31日 11:16:45

可以模仿Settings其他菜单项加入自己想要的一级或二级子菜单项。

比如,在菜单Settings里加入一级和二级Usb Mode Settings菜单项 (以Android4.4 KK为例)

一. 加入一级子菜单项Usb Mode Settings, 加在About phone后面

1. packages/apps/Settings/AndroidManifest.xml
        <activity Android:name="Settings$DeviceInfoSettingsActivity"
                android:theme="@style/Theme.Holo.DialogWhenLarge"
                android:label="@string/device_info_settings"
                android:taskAffinity="com.android.settings"
                android:parentActivityName="Settings">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.DEVICE_INFO_SETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />db
                <category android:name="android.intent.category.VOICE_LAUNCH" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.DeviceInfoSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/about_settings" />
        </activity>

        <activity android:name="Settings$UsbModeSettingsActivity"
                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                android:label="@string/usb_mode_settings"
                android:taskAffinity="com.android.settings"
                android:parentActivityName="Settings">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.USB_MODE_SETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.UsbModeSettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/usb_mode_settings" />
        </activity>


2. packages/apps/Settings/res/xml/settings_headers.xml 
        <!-- About Device -->
        <dashboard-tile
                android:id="@+id/about_settings"
                android:title="@string/about_settings"
                android:fragment="com.android.settings.DeviceInfoSettings"
                android:icon="@drawable/ic_settings_about"
                />
                
        <!-- Usb Mode -->
        <dashboard-tile
                android:id="@+id/usb_mode_settings"
                android:title="@string/usb_mode_settings"
                android:fragment="com.android.settings.UsbModeSettings"
                android:icon="@drawable/ic_settings_about"
                />


 Lollipop
packages\apps\Settings\res\xml\dashboard_categories.xml        
        <!-- Usb Mode -->
        <dashboard-tile
                android:id="@+id/usb_mode_settings"
                android:title="@string/usb_mode_settings"
                android:fragment="com.android.settings.UsbModeSettings"
                android:icon="@drawable/ic_settings_about"
                />
3. packages\apps\Settings\src\com\android\settings\Settings.Java
     public static class DeviceInfoSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class UsbModeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ApplicationSettingsActivity extends SettingsActivity { /* empty */ }

4. packages/apps/Settings/src/com/android/settings/Settings.java
            DeviceInfoSettings.class.getName(),
+            UsbModeSettings.class.getName(),
             ManageApplications.class.getName(),

Lollipop
packages\apps\Settings\src\com\android\settings\SettingsActivity.java
            DeviceInfoSettings.class.getName(),
+            UsbModeSettings.class.getName(),
            ManageApplications.class.getName(),

 

5. packages/apps/Settings/res/values/strings.xml
增加新字符串

新增部分
6. packages/apps/Settings/res/drawable/
添加图标

7. 模仿packages/apps/Settings/res/xml/device_info_settings.xml新加一layout文件
packages/apps/Settings/res/xml/usb_mode_settings.xml
      android:title="@string/about_settings">        
        <!-- Device status - launches activity -->
        <PreferenceScreen android:key="status_info"
                android:title="@string/device_status" 
                android:summary="@string/device_status_summary">
            <intent android:action="android.intent.action.MAIN"
                    android:targetPackage="com.android.settings"
                    android:targetClass="com.android.settings.deviceinfo.Status" />
        </PreferenceScreen>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        android:title="@string/usb_mode_settings">
    <PreferenceCategory
            android:title="@string/usb_connection_category" />
    <CheckBoxPreference
        android:key="usb_mtp"
        android:title="@string/usb_mtp_title"
        android:summary="@string/usb_mtp_summary"
        />
    <CheckBoxPreference
        android:key="usb_mass_storage"
        android:title="@string/usb_ptp_title"
        android:summary="@string/usb_ptp_summary"
        />
</PreferenceScreen>

8. 模仿packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java新加一代码实现
packages/apps/Settings/src/com/android/settings/UsbModeSettings.java

 

二. 加入一级子菜单项Usb Mode Settings, 加在Developer options下面, 在"Desktop backup password"后面

1.packages/apps/Settings/AndroidManifest.xml
        <activity android:name="SetFullBackupPassword"
                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                android:exported="false">
        </activity>

        <activity android:name="UsbModeSettings"
                android:theme="@style/Theme.SubSettingsDialogWhenLarge"
                android:exported="false">
        </activity>


2. packages/apps/Settings/res/xml/development_prefs.xml
    <PreferenceScreen
            android:key="local_backup_password"
            android:title="@string/local_backup_password_title"
            android:summary="@string/local_backup_password_summary_none"
            android:persistent="false" >
        <intent
                android:action="android.settings.privacy.SET_FULL_BACKUP_PASSWORD"
                android:targetPackage="com.android.settings"
                android:targetClass="com.android.settings.SetFullBackupPassword" />
    </PreferenceScreen>

    <PreferenceScreen
            android:key="usb_mode"
            android:title="@string/usb_mode_settings"
            android:summary="@string/usb_mode_settings_summary"
        <intent
                android:action="android.intent.action.MAIN"
                android:targetPackage="com.android.settings"
                android:targetClass="com.android.settings.UsbModeSettings" />
    </PreferenceScreen>

3. /packages/apps/Settings/res/values/strings.xml
+    <string name="usb_mode_settings">USB mode settings</string>
......


4. 新加文件

      res/layout/usb_mode_settings.xml

     packages/apps/Settings/res/drawable/ 图标
 

    src/com/android/settings/UsbModeSettings.java

相关文章推荐

Android4.42-Settings源码分析之蓝牙模块Bluetooth(上)

继上一篇  Android系统源码剖析(一)---Settings 接着来介绍一下设置中某个模块的源码,本文依旧是基于Android4.42源码进行分析,分析一下蓝牙模块的实现。建议大致看一下关于...

Android L Settings界面结构简单分析

Android L Settings界面结构简单分析 Settings是Android系统很重要的模块,这部分也一直在看,很多时候都是在看某个具体的选项,比如WLAN,蓝牙这样具体的源码,但是对于主界...

Android Settings和SettingsProvider源码分析与修改

习惯了,看源码从AndroidManifest文件看起,先对工程有个大致的认识。 Settings也是经常需要改动的部分之一,包名:com.android.settings,工程名:Settings,...

Android Settings(系统设置)源码分析(一)

由于工作需求,经常要用到系统设置中的一些功能,如调用里面的一些屏保、屏幕缩放、分辨率、音频输出模式等等接口和数据,于是决定对Settings(版本:Android4.4.4)源码做一个大体的分析。 ...

android settings学习笔记(二)-细节分析

android settings学习笔记(二)-细节分析 1、Settings类     设置页面的Activity:     public class Settings extends P...
  • ican87
  • ican87
  • 2014年03月06日 17:24
  • 2208

Android Lollipop (5.0) 原生代码 Settings 首页加载逻辑分析

主入口为com.android.settings.Settings. 这只是一个wrapper的类, 它继承于 SettingsActivity类,并且声明了一堆公有的继承于SettingsActiv...

android settings源代码分析(2)

通过前一篇文章  Android settings源代码分析(1)  分析,大概知道了Settings主页面是如何显示,今天主要分析“应用”这一块google是如何实现的。   应用对...

Android6.0源码分析之Settings(二)

本博文主要讲述6.0列表的加载 首先外层布局 setContentView(mIsShowingDashboard ? R.layout.settings_main...

Android源码之“应用程序界面“分析一( 从settings开始)

Android源码之应用程序界面分析一(从settings开始): 一。 预热: 当我们点击"设置” ->“应用程序”中时,会出现应用程序的列表,而且,有“所有应用”,“已下载”如,“正在运行”等...
  • liranke
  • liranke
  • 2013年12月31日 15:32
  • 4305

Android Settings源码简单分析之列表项Switch

最近简单看了Android的源代码,从Settings模块开始看起,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android Settings 分析
举报原因:
原因补充:

(最多只允许输入30个字)