AndroidSDK-原生Settings添加菜单项

Android

Android N原生Settings应用添加自定义的一级菜单项

被动方式

  • 被动方式:修改被调用应用的AndroidManifest.xml

    根据菜单项Google的启发,因此猜想是否可以通过这种方式添加选项。

    原生Settings菜单修改

  • 源码追踪

    追踪:Settings\src\com\android\settings\SettingsActivity.java
    追踪父类:SettingsLib\src\com\android\settingslib\drawer\SettingsDrawerActivity.java

    原生Settings源码分析-添加菜单1

    最终定位:SettingsLib\src\com\android\settingslib\drawer\TileUtils.java,因此根据源码,反推出原生Settings通过遍历AndroidManifest.xml文件,添加符合要求的菜单项
    原生Settings源码分析-添加菜单2

  • 修改AndroidManifest.xml

    原生Settings-AndroidManifest修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <activity
    android:name=".app.AppsActivity"
    android:launchMode="singleTask">
    <!-- 核心,特别重要,必须添加:用于Settings过滤出菜单项Category -->
    <intent-filter>
    <action android:name="com.android.settings.MANUFACTURER_APPLICATION_SETTING" />
    </intent-filter>
    <!-- 设置显示的title -->
    <meta-data android:name="com.android.settings.title" android:resource="@string/app_name" />
    <!-- 设置显示的小标题 -->
    <meta-data android:name="com.android.settings.summary" android:resource="@string/app_name" />
    <!-- 设置显示的图标 -->
    <meta-data android:name="com.android.settings.icon" android:resource="@drawable/load_err" />
    <!-- 核心,特别重要,必须添加:表示添加一个菜单选项,用于Settings分类,归属于“个人”的选项下,也可以是其他的:系统等等 -->
    <meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.personal"/>
    </activity>
  • 验证猜想

    通过反编译Google的apk发现,里面的AndroidManifest里面行数L2536-L2543的代码与上面修改的代码是一样的,因此,猜想是正确的。

  • 拓展

    • 菜单项的所属分类
      修改value值,可以选择分类:personal、system,其他的分类未验证

      1
      2
      3
      <meta-data android:name="com.android.settings.category"
      // android:value="com.android.settings.category.system
      android:value="com.android.settings.category.personal"/>
    • 菜单项的顺序
      修改优先级,可以调整顺序,等级越高的,在上面

      1
      2
      <intent-filter android:priority="4">
      </intent-filter>
  • 注意

    通过验证:需要预置apk才有效,安装的方式是没有作用

主动方式

  • 主动的方式:通过修改原生Settings的代码,也可以添加一级、二级菜单项,但是这种方式比较繁琐复杂。如果只是简单在原生Settings上添加一级菜单项,建议使用被动方式

感谢

非常感谢 迷途羔羊 的帮助gringrin

谢谢老板,请尽情用红包来蹂躏我吧!!!
0%