Android 8.0 电池显示,电池定制

本文探讨了Android 8.0 SystemUI中电池显示的变化,指出电池由代码绘制而非使用图片,导致修改困难。通过分析status_bar.xml布局和BatteryMeterView.java,提出通过创建自定义控制器OppoBatteryController,替换源生电池并添加自定义电池样式的方法,以实现电池样式的灵活修改。
摘要由CSDN通过智能技术生成

这篇文章主要说的是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);
    }

    
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值