修改Android系统Setting中电池默认的进度条

修改Android系统Setting中电池默认的进度条

需要修改的系统中Setting中的电池进度条图标

在这里插入图片描述

修改后的进度条(其实是有动画效果的没展示效果):

在这里插入图片描述

先找到Setting中的电池对应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-auto"
    android:key="power_usage_summary_screen"
    android:title="@string/power_usage_summary_title"
    settings:keywords="@string/keywords_battery">

<!-- 定义以及文本标签的偏好-->
    <com.android.settingslib.widget.UsageProgressBarPreference
        android:key="battery_header"
        android:title="@string/summary_placeholder"
        android:selectable="false"
        settings:controller="com.android.settings.fuelgauge.BatteryHeaderPreferenceController" />

    <com.android.settingslib.widget.LayoutPreference
        android:key="battery_help_message"
        android:layout="@layout/preference_battery_error"
        android:selectable="false"
        settings:searchable="false" />

    <com.android.settings.widget.CardPreference
        android:key="battery_tip"
        android:title="@string/summary_placeholder"
        settings:controller="com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController" />

.....省略
  • 上述标签与截图一中都有对应,只不过是每组偏好设置中的标签的有所区别,例如上述截图中电池百分比,进度条显示、电量提示摘要为当前组的preference中Layout文件

接下来可以进入到BatteryHeaderPreferenceController中,这是控制preference的具体逻辑

在这里插入图片描述
在这里插入图片描述

综合上述:其实就是将获取电池的电量设置到perference中,再配合Activity和Fragment即可显示,现在可以找一下具体的UsageProgressBarPreference:

UsageProgressBarPreference.java

UsageProgressBarPreference.xml

  • 可以看到进度条使用的是ProcessBar,只重新修改就可以替换效果,那么需要实现我的截图中的效果只需要修改UsageProgressBarPreferenc.xml中的ProcessBar对应的样式即可,另建立一个xml文件,自己描述出自己想要的效果即可:
  1. 自定义的 battery_rounded_progress.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#ACECB7" />
            <corners android:radius="10dp" />
            <stroke
                android:width="0dp"
                android:color="#7a7374" />
        </shape>
    </item>
    <item android:id="@android:id/background">
        <scale android:scaleWidth="100%">
            <selector>
                <item android:state_enabled="false">
                    <shape>
                        <solid android:color="#604c1f24"/>
                        <corners android:radius="10dp" />
                    </shape>
                </item>
                <item>
                    <shape>
                        <solid android:color="#33DA4A"/>
                        <corners android:radius="10dp" />
                    </shape>
                </item>
            </selector>
        </scale>
    </item>
</layer-list>
  1. 需要修改的ProcessBar
<ProgressBar
        android:id="@+id/battery_process_bar"
        android:layout_width="match_parent"
        android:layout_height="38dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="17dp"
        android:progress="0"
        android:max="100"
        style="?android:attr/progressBarStyleHorizontal"
        android:progressDrawable="@drawable/battery_rounded_progress"/>
  1. 上述两步完成后就可以显示静态的进度条,修改为带有的进度条需要进一步UsageProgressBarPreferenc.java 在onBindViewHolder方法中获取到布局文件再通过
ProgressBar progressBar = (ProgressBar)preferenceViewHolder.findViewById(R.id.battery_process_bar);
        ValueAnimator valueAnimator;
        if (this.mPercent < 0) {
            valueAnimator = ObjectAnimator.ofFloat(0, 0);
            Log.i(TAG, "setPercent: 当前电量4电量为:........... "+this.mPercent);
        } else {
            // setting current percent
            valueAnimator = ObjectAnimator.ofFloat(0, this.mPercent);
            Log.i(TAG, "setPercent: 当前电量5电量为:........... "+this.mPercent);
        }
        valueAnimator.setDuration(1500);
        valueAnimator.setInterpolator(new DecelerateInterpolator());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                float size= (float) valueAnimator.getAnimatedValue();
                progressBar.setProgress((int) size);
            }
        });
        valueAnimator.start();

总结:个人开始其实是定义的其他类型的进度条,如果需要更多进度条类型进度条,可以将ProcessBar替换为自定义的进度条类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值