这篇文章主要说的是android8.0SystemUI电池显示方面。
好像是从android8.0起,电池是通过代码绘制的,并非往常版本是使用drawable下的图片直接显示的,这样的话,修改起来就比较麻烦。
一、电池布局
frameworks\base\packages\SystemUI\res\layout\status_bar.xml中包含system_icon.xml布局。
system_icon布局中BatteryMeterView就是电池。
随后的id为battery_level_text、oppobattery是我加的控件。下面说说,如果要修改电池应该如何做。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/system_icons"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical">
<ImageView
android:id="@+id/status_bar_headset"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_headset"
android:visibility="gone"
/>
<com.android.keyguard.AlphaOptimizedLinearLayout android:id="@+id/statusIcons"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal"/>
<include layout="@layout/signal_cluster_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/signal_cluster_margin_start"/>
<com.android.systemui.BatteryMeterView android:id="@+id/battery"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:visibility="gone"
/>
<TextView
android:id="@+id/battery_level_text"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:gravity="center"
android:layout_gravity="center_vertical"
android:textColor="#ffffffff"
android:textSize="@dimen/battery_level_text_size"/>
<ImageView
android:id="@+id/oppobattery"
android:gravity="center"
android:layout_height="16dp"
android:scaleType="fitXY"
android:layout_width="30dp"/>
</LinearLayout>
BatteryMeterView.java,自定义视图,代码不难,也不简单。其中有行代码mDrawable = new BatteryMeterDrawableBase(context, frameColor);,
BatteryMeterDrawableBase电池就是在这里绘制的。
其他代码就不做就介绍了,比较简单。
public class BatteryMeterView extends LinearLayout implements
BatteryStateChangeCallback, Tunable, DarkReceiver, ConfigurationListener {
private final BatteryMeterDrawableBase mDrawable;
private final String mSlotBattery;
private final ImageView mBatteryIconView;
private final CurrentUserTracker mUserTracker;
private TextView mBatteryPercentView;
private BatteryController mBatteryController;
private SettingObserver mSettingObserver;
private int mTextColor;
private int mLevel;
private boolean mForceShowPercent;
private int mDarkModeBackgroundColor;
private int mDarkModeFillColor;
private int mLightModeBackgroundColor;
private int mLightModeFillColor;
private float mDarkIntensity;
private int mUser;
public BatteryMeterView(Context context) {
this(context, null, 0);
}