Android Battery视图界面分析

本文分析了Android Settings中的Battery界面,包括电池电量曲线的绘制、Battery Saver的跳转处理和耗电排行显示。电量曲线通过自定义Preference和Path类实现,渐变效果使用LinearGradient填充。Battery Saver跳转通过监听SettingsProvider更新summary。耗电排行则采用PreferenceGroup添加子项展示。
摘要由CSDN通过智能技术生成

每一个不曾起舞的日子,都是对生命的辜负。—–尼采

最近关注功耗问题,顺便看了下Settings模块中Battery界面。这块的UI还是写的挺不错的,在此分享下。

Battery界面分析

下图是我在看该界面时,脑中的一些疑惑点。
Battery界面
上图列出的三大块疑问,正是引起我好奇心的地方。先来一个一个说下当初自己想的实现方式。

  • battery saver的跳转处理:这个界面跳转肯定是Preference里面弄个android:fragment属性,把跳转的fragment设置进来的,其中的Summary内容在跳转回来后会变动,那么这里实际上就是两个fragment之前通信问题,应该是接口回调实现的。
  • 电量曲线的显示:这个是勾起我好奇心的罪魁祸首。整个界面是由Preference构建的,系统的Preference肯定实现不了这种效果,那么应该是自定义了一个Preference然后嵌套进来的。还没撸过自定义Preference,而且这个view还有点小复杂呢,曲线用path就可以搞定,关键是下方的渐变效果怎么搞呢?LinearGradient到是可以,但它填充规则图形还好用,电量曲线变化多端,如何保证曲线下方全部着上渐变色,上方空白呢?难道挨个计算曲线上的点,然后连接到底部,用LinearGradient着色?真要这样搞计算量有点大啊。
  • 耗电排行的显示: 电量统计的数据肯定由系统接口上报,有个listpreference貌似可以将list嵌套在perference里呢,百度以下我应该就知道。

以上是我看到这个界面的一些想法。带着这点好奇心,来观摩下源码是如何给我解释的。

Battery界面如何实现

battery saver的跳转处理

packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java,
该类为Battery界面的主类。它继承至PreferenceFragment.要想见识下Preference的各种花式用法,源码中的Settings模块绝对是不二选择。
找到其加载的xml文件。
packages/apps/Settings/res/xml/power_usage_summary.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
        android:title="@string/power_usage_summary_title"
        settings:keywords="@string/keywords_battery">
        <com.android.settings.fuelgauge.BatterySaverPreference
            android:title="@string/battery_saver"
            android:fragment="com.android.settings.fuelgauge.BatterySaverSettings" />
        <SwitchPreference
            android:key="battery_pct"
            android:title="@string/show_battery_percentage"
            android:summary="@string/show_battery_percentage_summary"
            android:persistent="false" />
        <com.android.settings.fuelgauge.BatteryHistoryPreference
            android:key="battery_history" />
        <PreferenceCategory
            android:key="app_list"
            android:title="@string/power_usage_list_summary" />
</PreferenceScreen>

本小节我们关注的是BatterySaverPreference。没有悬念的用了
android:fragment="com.android.settings.fuelgauge.BatterySaverSettings"
将点击跳转的BatterySaverSettings引入进来。它自身自定义了BatterySaverPreference,注意到xml里只申明了title跟fragment,缺少了summary属性,看看自定义的BatterySaverPreference是如何处理summary更新请求的。
packages/apps/Settings/src/com/android/settings/fuelgauge/BatterySaverPreference.java

public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值