安卓源码设置页面也是一个内置app,可以直接模块编译后就可以直接adb install ,不用push到指定文件夹安装,修改起来比较方便
settings源码目录在packages/apps
settings入口在settings页面
<activity-alias android:name="Settings" android:label="@string/settings_label_launcher" android:taskAffinity="com.android.settings.root" android:launchMode="singleTask" 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>
里面都是一些静态内部类没有实现,主要实现在SettingsActivity
SettingsActivity里面有个方法launchSettingFragment
@VisibleForTesting void launchSettingFragment(String initialFragmentName, Intent intent) { if (initialFragmentName != null) { setTitleFromIntent(intent); Bundle initialArguments = intent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); switchToFragment(initialFragmentName, initialArguments, true, mInitialTitleResId, mInitialTitle); } else { // Show search icon as up affordance if we are displaying the main Dashboard mInitialTitleResId = R.string.dashboard_title; switchToFragment(TopLevelSettings.class.getName(), null /* args */, false, mInitialTitleResId, mInitialTitle); } }
里面有个参数initialFragmentName就是要跳转的meta,如果这个meta为空就跳到首页,也就是TopLevelSettings.class
TopLevelSettings.class里面有个方法
@Override protected int getPreferenceScreenResId() { return R.xml.top_level_settings; }
这个xml是就在主页面要展示的内容,可以直接注释里面的内容删除某一项
如果不想要某一个页面出现,直接找到相应的activity注释里面的meta就行