Settings是系统提供各种设置的一个应用,源码位于packages/apps/Settings,平板上界面如下:
从上面抓取的布局来看,整体布局是RecyclerView+Fragment。
主要类
- SettingsHomepageActivity.java:主界面,采用RecyclerView+Fragment结构
- settings_homepage_container.xml:主界面布局文件
- TopLevelSettings.java:主界面中Fragment
- DashboardFragment.java:Settings中一个fragment基类,用来显示Prefrence列表
- top_level_settings.xml: 主界面Prefrence布局文件
- SubSettingLauncher.java:SubSettings启动类,点击Prefrence是启动SubSettings,SubSettings是一个Activity
- SubSettings.java/SettingsActivity.java:展示Prefrence对应的fragment
创建主界面Activity
Mainfest中设置的LauncherActivity为Settings,这个是一个别名,实际指向的是SettingsHomepageActivity
// Settings\AndroidManifest.xml
<activity-alias android:name="Settings"
android:label="@string/settings_label_launcher"
android:taskAffinity="com.android.settings.root"
android:launchMode="singleTask"
android:exported="true"
android:targetActivity=".homepage.SettingsHomepageActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/>
</activity-alias>
SettingsHomepageActivity extends FragmentActivity,onCreate()中主要进行加载布局,创建Fragment,布局文件settings_homepage_container.xml和上面抓取的布局是可以对上的
// Settings\src\com\android\settings\homepage\SettingsHomepageActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1. 是否嵌入显示Activity
mIsEmbeddingActivityEnabled = ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this);
// 2. 设置布局文件
setContentView(R.layout.settings_homepage_container);
// 3. 设置主界面背景、appbar高度、搜索栏等
updateAppBarMinHeight();
initHomepageContainer();
updateHomepageAppBar();
updateHomepageBackground();
initSearchBarView();
// 4. 不是低内存设备,显示建议条目
if (!getSystemService(ActivityManager.class).isLowRamDevice()) {
initAvatarView();
showSuggestionFragment(scrollNeeded);
}
// 5.创建fragment
mMainFragment = showFragment(() -> {
final TopLevelSettings fragment = new TopLevelSettings();
fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
highlightMenuKey);
return fragment;
}, R.id.main_content);
}
创建主界面PrefrenceFragment
TopLevelSettings extends DashboardFragment,DashboardFragment是Settings中一个fragment基类,用来显示Prefrence列表。

最低0.47元/天 解锁文章
424

被折叠的 条评论
为什么被折叠?



