• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Ocean123123
博客园    首页    新随笔    联系   管理    订阅  订阅

安卓源码分析之设置页面注释某一项

安卓源码设置页面也是一个内置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就行

posted @ 2021-06-15 12:17  Ocean123123  阅读(111)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3