android 7.0中Settings新功能全面解析

本文解析了Android 7.0 Settings的改进,包括新增的侧滑菜单,Dashboard category的数据加载逻辑,Condition和Suggestion的实现。侧滑菜单采用DrawerLayout实现,Condition提供状态显示和快捷开关,Suggestion为常用功能添加快捷入口。Settings的Dashboard category加载逻辑被抽取到SettingsLib中,DashboardAdapter和TileUtils负责布局构建和数据处理。
摘要由CSDN通过智能技术生成

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";

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>

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";

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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值