当前位置:   article > 正文

android 7.0中Settings新功能全面解析_安卓原生settings解析

安卓原生settings解析

Settings N预览

imageimage

android N 在Settings中作了一些调整,如上面的截图。

  • 增加了侧滑菜单,采用v4下的DrawerLayout来实现;
  • 在Settings主界面增加了Condition,能够在设置列表中显示状态;
  • 在Settings主界面增加了Suggestion。

Dashboard category数据的加载

首先来看下Settings的Dashboard category,dashboard的中文意思指的是仪表板,在Settings中指的是Settings中显示的选项,如WLAN,Bluetooth这样的,参见上面的预览图片。

在android M中,dashboard的加载是放在SettingsActivity中,而且Settings/res/xml/dashboard_categories.xml这个文件专门用来描述dashboard的整体结构,参见下图。
image

在Settings N中,则将dashboard这部分的逻辑抽取了出来,放在/frameworks/base/packages/SettingsLib/目录下。N中不再使用dashboard_categories.xml这个文件来描述Settings各选项的架构,而且将Dashboard的初始化放在SettingsLib中来处理,首先看下面的图片:

Settings AndroidManifest.xml
image

SettingsLib/src/com/android/settingslib/drawer/TileUtils.java

在TileUtils中定义的Actions,用于标记Activity属于哪一个Dashboard category

/**
 * Same as #EXTRA_SETTINGS_ACTION but used for the platform Settings activities.
 */
private static final String SETTINGS_ACTION =
        "com.android.settings.action.SETTINGS";

private static final String OPERATOR_SETTINGS =
        "com.android.settings.OPERATOR_APPLICATION_SETTING";

private static final String OPERATOR_DEFAULT_CATEGORY =
        "com.android.settings.category.wireless";

private static final String MANUFACTURER_SETTINGS =
        "com.android.settings.MANUFACTURER_APPLICATION_SETTING";

private static final String MANUFACTURER_DEFAULT_CATEGORY =
        "com.android.settings.category.device";

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

Categories定义在Settings/res/values/donottranslate.xml中,分为四个大的Category,如下代码

Settings/res/values/donottranslate.xml

<string name="category_key_wireless">com.android.settings.category.wireless</string>
<string name="category_key_device">com.android.settings.category.device</string>
<string name="category_key_personal">com.android.settings.category.personal</string>
<string name="category_key_system">com.android.settings.category.system</string>
  • 1
  • 2
  • 3
  • 4

TileUtils.java中定义的Meta Data

Name of the meta-data item that should be set in the AndroidManifest.xml
to specify the icon、the title、the summary that should be displayed for the preference.

 public static final String META_DATA_PREFERENCE_ICON = "com.android.settings.icon";

 public static final String META_DATA_PREFERENCE_TITLE = "com.android.settings.title";

  public static final String META_DATA_PREFERENCE_SUMMARY = "com.android.settings.summary";
  • 1
  • 2
  • 3
  • 4
  • 5

image

Meta data会在AndroidManifest.xml进行配置,在TileUtils.java中加载Dashboard Category的时候,会通过PackageManager获得各个Activity的信息后,再动态的更新到页面上。(另外,我发现对于这些Dashboard的icon,title和Summary有的在AndroidManifest.xml中有配置meta-data有的却没有,我感觉这里应该用的是Activity节点下的icon,title(lablel),这部分如果要彻底搞清楚需要看PackageManager解析AndroidManifest.xml的逻辑,这里不作深究)。

接下来看在TileUtils.java代码中是对于Dashboard是如何处理的
image

上面的getCategories方法主要分为两个部分来看,首先通过PackageManager获得各个Category的信息保存到ArrayList中,接着对ArrayList中的数据按照优先级进行排序,这样主界面拿到这些数据就可以显示了。

Dashboard ca

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号