天天看点

android5.1 Settings简介

android5.1的Settings相对于4.4界面上改善了不少,使用了ToggleSwitch,整体风格改为Light。新增了一些功能:屏幕投影,反色,搜索设置项等。本文简单介绍5.1的Settings,列举一些常见的修改。帮助大家快速入门。

虽然增加一些功能但架构没有太大变化,还是使用PreferenceFragment。主要改变在Settings的首页不再使用PreferenceActivity。

从AndroidManifest.xml可以很快找到首页SettingsActivity.java这个界面,只是继承了普通的Activity。

查看setContentView的布局但没有发现有内容加载

setContentView(mIsShowingDashboard ?
                R.layout.settings_main_dashboard : R.layout.settings_main_prefs);
           

继续查找可以看到如下方法,采用了跟4.4类似的方法将布局放到xml里面。5.1的xml叫dashboard_categories,而4.4叫settings_headers。相对来说功能简单了很多,只能跳转到相应的PreferenceFragment。

/**
     * Called when the activity needs its list of categories/tiles built.
     *
     * @param categories The list in which to place the tiles categories.
     */
    private void buildDashboardCategories(List<DashboardCategory> categories) {
        categories.clear();
        loadCategoriesFromResource(R.xml.dashboard_categories, categories);
        updateTilesList(categories);
    }
           

一般都会对其做简单的增删操作,如果直接删除xml上的项目会引起很多findViewById的报错,所以最好调用常规流程删除,updateTilesList( )这个方法里提供了参考。直接找到id设为removeTile=true就可以了。

...
else if (id == R.id.print_settings) {
        boolean hasPrintingSupport = getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_PRINTING);
        if (!hasPrintingSupport) {
              removeTile = true;
        }
}
...
           

PreferenceFragment的项目删除跟以上类似,从dashboard_categories.xml里找到对应的fragment在onCreate( )方法后直接删除就可以了。找到对于的父容器(PreferenceCategory),调用removePreference就可以了,如果没有父容器就直接removePreference,例如在NotificationSettings.java里删除一些设置项。

sound.removePreference(findPreference(KEY_RING_VOLUME));
        sound.removePreference(findPreference("zen_mode"));
        notification.removePreference(mLockscreen);
           

settings的默认值在5.1里没有变化,大部分默认设置还是在SettingsProvider下的defaults.xml里找到初始化。还有些设置项的属性为android:persistent="false"。说明要自己实现持久化,设置项的Preference由对应的service维护,比如wifi的设置项。这时默认值大多在framework/base/core/res/res/value/strings.xml或bools.xml或integers.xml下能找到。

android5.1对settings的修改使以后自定义settings界面变得更容易了,重写DashboardSummary.java的这个fragment的布局就能实现。

继续阅读