Settings源码分析

本文详细分析了Android Settings应用的源码,从AndroidManifest.xml开始,揭示了Settings主类及其实现的PreferenceActivity。讲解了如何通过onBuildHeaders方法自定义显示效果,以及header在不同屏幕尺寸下的展示方式。此外,还介绍了PreferenceFragment的使用和布局文件preference-headers、PreferenceScreen的结构。通过学习,可以深入理解Settings的内部机制。
Settings源码分析 4.2
1. 拿到一份代码,首先是找到它的入口,一步一步往里看
Settings/AndroidManifest.xml
<activity android:name="Settings" 
                android:label="@string/settings_label_launcher"
                android:taskAffinity="com.android.settings"
		        android:configChanges="keyboardHidden|screenSize|mcc|mnc"
		        android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.settings.SETTINGS" />
            </intent-filter>
        </activity>

2. 知道主类是Settings
src/com/android/settings/Settings.java
一个Activity根据以往经验,会在onCreate里声明使用的layout文件,如果主layout文件含有fragment,  \
则具体的layout应该在实现Fragment类中的onCreateView方法里,不幸的是在Settings里都没有找到,那就是它有自己的机制了,看它的父类吧
public class Settings extends PreferenceActivity
        implements ButtonBarHandler, OnAccountsUpdateListener {
        ...
    }
    
3. PreferenceActivity是framework提供的类,去查api吧
1). 概述
这是一个展示preferences结构的类,这个功能经常包含Prefere
### Android Settings 源码解析 #### 设置应用架构概述 设置应用程序作为 Android 设备上的核心组件之一,提供了管理和配置各种硬件与软件特性的接口。其内部结构复杂且层次分明,主要由多个 Fragment 和 Activity 组成[^3]。 #### 主要类和文件位置 - **Settings 类**: 这是整个项目的入口点,在 `packages/apps/Settings/src/com/android/settings` 下可以找到此目录下的所有 Java 文件。 - **InputMethodAndLanguageSettings.java**: 特定于输入法和服务的语言设定部分位于 `com.android.settings.inputmethod.InputMethodAndLanguageSettings` 中,负责处理键盘布局切换等功能[^2]。 #### 关键概念和技术要点 ##### 使用Fragment构建UI 现代版本的安卓偏好采用基于片段(Fragment)的方式创建用户界面,这使得 UI 更加灵活多变。例如,在 InputMethodAndLanguageSettings 中就运用到了 PreferenceFragment 来展示列表项并响应用户的交互操作[^5]。 ```java public class InputMethodAndLanguageSettings extends PreferenceFragment { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey){ setPreferencesFromResource(R.xml.language_settings,rootKey); } } ``` ##### 利用Activity-Alias优化启动流程 为了提高性能以及简化某些场景下活动(Activity)之间的跳转逻辑,官方引入了 activity-alias 技术。通过指定 android:targetActivity 属性来关联实际的目标 Activity 实现快速导航至特定页面而不必每次都重新实例化新的对象[^4]。 ```xml <activity-alias android:name=".AliasActivity" android:targetActivity=".MainActivity"> </activity-alias> ``` ##### 数据持久化的实现方式 对于一些需要长期保存的数据(比如 Wi-Fi 密码),通常会借助 SharedPreferences 或者 ContentProvider 完成交互过程中的数据存储工作;而对于更复杂的业务需求,则可能涉及到 SQLite 数据库的操作[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值