当前位置: 首页 > news >正文

android Settings 解析

为什么80%的码农都做不了架构师?>>>   hot3.png

1、Settings的主界面的实现:

Settings采用了PreferenceActivity和PreferenceFragment结合的实现方式。

Settings.java继承自PreferenceActivity,是Settings的主界面,它通过loadHeadersFromResource函数(api level 11)加载res/xml/settings_headers.xml来构造界面。在settings_headers.xml中声明了要在Settings主界面显示的各个header(如Sound、Display等)Settings.HeaderAdapter将其中的header分为三类。在Settings.HeaderAdapter中的getView方法中根据header的类型使用不同的布局文件。

为header划分类型的函数

       static int getHeaderType(Header header) {

           if (header.fragment == null && header.intent == null) {

               return HEADER_TYPE_CATEGORY; // 因为没有指明fragment和intent

           } else if (header.id == R.id.wifi_settings || header.id == R.id.bluetooth_settings || header.id == R.id.mobiledata_settings) {

               return HEADER_TYPE_SWITCH; // 针对特定的三个header,分别为Wi-Fi、Bluetooth和Mobile data

           } else {

               return HEADER_TYPE_NORMAL;

           }

       }

当我们点击主界面的header后会显示与该header相关的设置界面。大部分(如Display的详细设置界面)都是通过继承PreferenceFragment来实现的;有一部分是在settings_headers.xml中声明<intent>,当被点击时(触发PreferenceActivity的onHeaderClick())将会通过startActivity来启动在<intent>节点中声明的targetClass(如设置中的Add account)。

2、通过res/xml/settings_headers.xml分析android4.3里设置的构成

无线和网络

Wifi:com.android.settings.wifi.WifiSettings

MobileData:com.android.phone.MSimMobileNetworkSubSettings   phone里的写的

Bluetooth:com.android.settings.bluetooth.BluetoothSettings

Data Usage(流量使用情况):com.android.settings.DataUsageSummary

Operator hook(运营商):com.android.settings.WirelessSettings(NFC    nfc  beam 具体不清楚)

Other wireless and network controls(更多):com.android.settings.WirelessSettings

设备

Multi Sim Settings(多SIM卡设置):com.android.settings.MultiSimSettings被注释掉了

Multi Sim Settings(双卡设置):com.android.settings.multisimsettings.MultiSimSettings

Global roaming settings(国际漫游设置)if RoamingSettings installed(如果安装了漫游设置):android:action="com.android.action.roamingsettings"

Sound:com.android.settings.SoundSettings

Display:com.android.settings.DisplaySettings

Storage:com.android.settings.deviceinfo.Memory

Battery:com.android.settings.fuelgauge.PowerUsageSummary

Application Settings(应用):com.android.settings.ApplicationSettings

Manage users(用户):com.android.settings.users.UserSettings

Manufacturer hook(制造商):com.android.settings.WirelessSettings

PERSONAL(个人)

Location(位置信息使用权限):com.android.settings.LocationSettings

Security(安全):com.android.settings.SecuritySettings

Language:com.android.settings.inputmethod.InputMethodAndLanguageSettings

Backup and reset(备份和重置):com.android.settings.PrivacySettings

ACCOUNTS section(账户)

add account(添加账户):android.settings.ADD_ACCOUNT_SETTINGS

SYSTEM(系统)

Date & Time:com.android.settings.DateTimeSettings

Accessibility feedback(辅助功能):com.android.settings.AccessibilitySettings

Development(开发者选项):com.android.settings.DevelopmentSettings

About Device(关于手机):com.android.settings.DeviceInfoSettings

 

转载于:https://my.oschina.net/dccjll/blog/1068778

相关文章:

  • 【转】HTML !--...-- 注释 、CSS/JS //注释 和 /*.....*/ 注释
  • 瑞典奶爸“坐月子”很酷,他们的育儿神器连布拉德皮特都在用
  • 陈松松:制作视频优先选择这5种类型,总有一个适合你
  • 数据挖掘十大经典算法--CART: 分类与回归树
  • PyTorch快速入门教程三(神经网络)
  • the import java.util.* cannot be resolve,怎么解决
  • 美国科技公司的“放权时代”:出走的创始人不在少数
  • JavaScript DOM 10 - 滚动
  • 与高通纠纷受关注 苹果利润或遭诺基亚侵权诉讼蚕食
  • Atlantis退出核心VDI软件和一体机市场
  • 精解Java中代理模式的实现
  • 硅谷投资人Tusk:特朗普当选 硅谷的新机会在哪儿
  • 法国轻奢手机品牌HANMAC 解决手机行业创新瓶颈
  • 易维帮助台如何“重新定义客户服务”?
  • 智慧城市建设新理念
  • 【node学习】协程
  • Android Volley源码解析
  • CentOS7 安装JDK
  • Effective Java 笔记(一)
  • Golang-长连接-状态推送
  • Joomla 2.x, 3.x useful code cheatsheet
  • js对象的深浅拷贝
  • js如何打印object对象
  • Map集合、散列表、红黑树介绍
  • nginx 配置多 域名 + 多 https
  • Octave 入门
  • Python socket服务器端、客户端传送信息
  • python 装饰器(一)
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 聊聊redis的数据结构的应用
  • 设计模式走一遍---观察者模式
  • 小程序开发中的那些坑
  • 携程小程序初体验
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 因为阿里,他们成了“杭漂”
  • 用jquery写贪吃蛇
  • 阿里云服务器购买完整流程
  • 带你开发类似Pokemon Go的AR游戏
  • 如何用纯 CSS 创作一个货车 loader
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)springcloud实战之config配置中心
  • (黑马C++)L06 重载与继承
  • (七)理解angular中的module和injector,即依赖注入
  • (五)c52学习之旅-静态数码管
  • (转)大型网站的系统架构
  • (转)关于多人操作数据的处理策略
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net Winform开发笔记(一)
  • .NET 的程序集加载上下文