修改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文件,自己描述出自己想要的效果即可:
- 自定义的 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>
- 需要修改的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"/>
- 上述两步完成后就可以显示静态的进度条,修改为带有的进度条需要进一步
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替换为自定义的进度条类。