向Settings中添加一项

本文详细介绍了在Android系统中如何自定义系统设置的过程,包括修改Settings.java以添加新的配置选项,更新DatabaseHelper.java来实现数据库的平滑升级,并设置默认值,以及在SettingsProvider/res/values/defaults.xml中定义默认配置等步骤。

一般需经过如下步骤,当然,如果不考虑终端第一次启动时的默认值问题,

1. 修改Settings.java,添加字段的定义

该文件中有System/Global/Security三个表分别对应的三个内部类,故,首先确定要加到哪个表中,找到相应的位置后添加。


2. 修改DatabaseHelper.java

主要是跟数据库平滑升级以及添加默认值项有关,需改动以下三个地方:

(1)修改DATABASE_VERSION的值

(2)onUpgrade()方法中根据规则添加对应的数据库字段。

(3)在load[System|Global|Securiy]Settings中添加新增的对应默认值项


3. 修改SettingsProvider/res/values/defaults.xml文件

在其中添加字段的默认值。


4. 界面修改

例如在SystemUpgradeSettings.java中修改,加入新增字段对应的控件的处理

system_upgrade_settings.xml中加入对应的checkBoxPreference

Settings添加一级菜单有多种方法,以下是不同场景下的具体操作: ### 方法一:通过修改 `Settings.java` 和 `SettingsGateway.java` 在 `Settings.java` 中添加新的 Activity 类,例如添加 `ScanSettingActivity`: ```java public static class ScanSettingActivity extends SettingsActivity{} ``` 在 `SettingsGateway.java` 中添加对应的 Fragment 类名和 Activity 类名: ```java public static final String[] ENTRY_FRAGMENTS = { // 其他已有类名... ScanSettingFragment.class.getName() }; public static final String[] SETTINGS_FOR_RESTRICTED = { // 其他已有类名... Settings.ScanSettingActivity.class.getName() }; ``` 此方法适用于需要添加带有特定功能的一级菜单,且该菜单需要关联特定的 Activity 和 Fragment 时使用,如添加扫描设置项的一级菜单 [^1]。 ### 方法二:通过修改布局文件 `top_level_settings.xml` 在 `res/xml/top_level_settings.xml` 配置文件中增加一个 `<Preference>` 标签,并为标签设置相关属性,如: ```xml <Preference android:key="top_level_otg" android:summary="otg" android:title="@string/settings_otg_tittle" android:order="150" android:icon="@drawable/ic_homepage_otg" android:fragment="com.android.settings.otg.OTGSettingFragment" settings:controller="com.android.settings.otg.TopLevelOTGPreferenceController"/> ``` 此方法适用于直接在 Settings 首页添加一级菜单,通过配置属性关联对应的 Fragment 和 Controller 类,如添加 OTG 设置的一级菜单 [^3]。 ### 方法三:动态添加一级菜单 在 `TopLevelSettings.java` 中重写 `getPreferenceScreenResId` 方法,根据条件动态返回不同的布局文件: ```java @Override protected int getPreferenceScreenResId() { int settings_custom = Settings.Global.getInt(getContext().getContentResolver(), "settings_custom", 1); if (settings_custom == 1) { return R.xml.top_level_settings; } else { return R.xml.top_level_settings_custom; } } ``` 此方法适用于根据不同的条件动态显示不同的一级菜单布局,如根据系统设置的值决定显示默认布局还是自定义布局 [^5]。 ### 方法四:添加辅助功能一级菜单 在 `res/xml/top_level_settings.xml` 配置文件中增加一个标签,并为标签设置相关属性(`fragment` 属性和 `controller` 属性需要配置该类的全限定类名)。配置好后创建 `assistant` 包,在该包下创建 `AssistantFunctionDashboardFragment` 类和 `AssistantFunctionPreferenceController` 类。`AssistantFunctionDashboardFragment` 类继承自 `SettingsPreferenceFragment` 类。此方法适用于添加辅助功能相关的一级菜单 [^2]。 ### 方法五:在 `Settings.java` 中简单添加 在 `Settings.java` 中添加新的 Activity 类,例如: ```java public static class MySettingsActivity extends SettingsActivity { /* empty */ } ``` 此方法是一种简单的在 `Settings.java` 中添加新 Activity 类以创建一级菜单的方式 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值