Android Settings(系统设置)源码分析(一)

           由于工作需求,经常要用到系统设置中的一些功能,如调用里面的一些屏保、屏幕缩放、分辨率、音频输出模式等等接口和数据,于是决定对Settings(版本:Android4.4.4)源码做一个大体的分析。

          先上一张平时经常接触到的界面,即 系统设置(Settings)界面:

    

    

   上面是4.2版本的,4.4的和它差不多

             Settings源码位于android系统packages/apps目录下,由系统编译。

             找到SettingsAndroidManifest.xml文件,找到程序入口,如下图:

 

           发现Settings的启动类是Settings.java,如下图:

    

可以看出,Settings继承了PreferenceActivity,关于PreferenceActivity,可以google或者参考API

   

      从上面Settings的界面可以看出,左边是一些tab,右面分别是各个tab对应的内容。

       进一步发现,Settings的主界面布局加载地方如下:

   

        在资源文件xml文件夹中找到settings_headers.xml这个文件,打开如下:

   

         内容比较多,只截取部分代码,可以看出,布局采用的是Preference Headers嵌套,左边的tab对应的都是一些相应的header ,右边的内容即为header的内容,分别对应的是一个个fragment

        至于onBuildHeaders(List<Header> headers)方法中的updateHeaderList(headers)方法有什么用呢?如下图:

    

      找到这个方法,如下图:

    

 它的作用是,会根据当前平台是否支持某项feature,决定是否显示应的header

       

        Android 3.0之后,摒弃了传统的 PreferenceScreen 嵌套方法,而是采用了所谓的Preference Headers 方法,该方法的要点是:在主屏中通过 headers xml 文件布局列出所有的主题设置项,而每个主题设置的详细设置则由各自指定的 PreferenceFragment 负责,而各自的 PreferenceFragment 可以如传统的PreferenceActivity一样布局自身的 PreferenceScreen

      另外,为了能够显示出 headers 中的布局列表,需要在继承的PreferenceActivity 类中实现 onBuildHeaders() 回调方法:

     @Override
     public voidonBuildHeaders(List<Header> target) {
         loadHeadersFromResource(R.xml.preference_headers, target);
     }

    优点:

             方便同一个应用在不同屏幕大小的设备中进行适配,比如,采用 preference headers 布局之后,系统设置应用在 phone pad 中的显示方式分别为分页显示和同一页面显示;采用 headers 可以降低 preference 布局文件的耦合度,把原本需要写在同一个xml文件中的布局各自独立开来,各自进行控制和维护而互不影响。

     

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值