天天看點

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的布局就能實作。

繼續閱讀