安卓7.0上在状态栏上加电池百分比

 

     》》》》》》


    安卓7.0上的statusbar上是默认不带电池百分比的。需要我们加上去。有两个方法,先写第一个方法

   1. 在frameworks/base/packages/SystemUI/res/layout/system_icons.xml中添加布局文件:

   

<TextView android:id="@+id/system_icon_battery_level"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginStart="@dimen/header_battery_margin_expanded"
        android:textColor="#ffffff"
        android:textSize="@dimen/battery_level_text_size"
        android:visibility="gone"
        android:importantForAccessibility="noHideDescendants"/>
    2. 在frameworks/base/packages/SystemUI/res/values/strings.xml中添加字符串

 

<string name="battery_level_template"><xliff:g id="level" example="45">%d</xliff:g>%%</string>
    3.在 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

   

   mKeyguardStatusBar.setUserInfoController(mUserInfoController);
        mKeyguardStatusBar.setUserSwitcherController(mUserSwitcherController);
        mUserInfoController.reloadUserInfo();

        ((BatteryMeterView) mStatusBarView.findViewById(R.id.battery)).setBatteryController(
                mBatteryController);
        mKeyguardStatusBar.setBatteryController(mBatteryController);

        ///M: add{@
        if (true) {//show battery percent
            mStatusBarView.setBatteryController(mBatteryController);
        }
        ///@}
   4.在 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java

      首先引入两个包

    

import android.widget.TextView;
import com.android.systemui.statusbar.policy.BatteryController;
 

      这个类需要实现接口

public class PhoneStatusBarView extends PanelBar implements BatteryController.BatteryStateChangeCallback

        增加其他方法

   public void onFinishInflate() {
        mBarTransitions.init();
        ///M:add {@
        mBatteryLevel = (TextView) findViewById(R.id.system_icon_battery_level);
        ///@}
    }
  
 private TextView mBatteryLevel;
    private BatteryController mBatteryController;

    public void setBatteryController(BatteryController batteryController) {
        mBatteryController = batteryController;
        mBatteryController.addStateChangedCallback(this);
        if (mBatteryLevel != null){
            mBatteryLevel.setVisibility(View.VISIBLE);
        }
    }

    @Override
    public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
        if (mBatteryLevel != null) {
            mBatteryLevel.setText(getResources().getString(R.string.battery_level_template, level));
        }
    }

    @Override
    public void onPowerSaveChanged(boolean isPowerSave) {
        // could not care less
    }


第二种方法


diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index 82119a3..455edf9 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -80,6 +80,15 @@
                 android:textColor="#ffffff"
                 android:textSize="@dimen/battery_level_text_size"
                 android:layout_marginStart="7dp"/>
+             <TextView android:id="@+id/battery_level"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:layout_marginStart="@dimen/header_battery_margin_keyguard"
+                android:paddingEnd="@dimen/battery_level_padding_end"
+                android:textColor="#ffffff"
+                android:textSize="@dimen/battery_level_text_size"
+                android:importantForAccessibility="noHideDescendants"/>
 
             <com.android.systemui.statusbar.policy.Clock
                 android:id="@+id/clock"


diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index f17403d..8bee44c 100755
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
 import android.app.ActivityManager.RunningTaskInfo;
 //add by yuhaixiang for factory end
+import com.android.systemui.FontSizeUtils;
+import java.text.NumberFormat;
 
 public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         DragDownHelper.DragDownCallback, ActivityStarter, OnUnlockMethodChangedListener,
@@ -443,6 +445,15 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
 
     private int mNavigationIconHints = 0;
     private HandlerThread mHandlerThread;
+    
+    private TextView mBatteryLevel;
+    private ContentObserver mBatteryLevelShow = new ContentObserver(new Handler()) {
+        @Override
+        public void onChange(boolean selfChange) {
+            mBatteryLevel.setVisibility((Settings.System.getInt(mContext.getContentResolver(),
+                    "status_bar_show_battery_percent_outside", 1) != 0) ? View.VISIBLE : View.GONE);
+        }
+    };
 
     // ensure quick settings is disabled until the current user makes it through the setup wizard
     private boolean mUserSetup = false;
@@ -778,7 +789,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
     // ================================================================================
     protected PhoneStatusBarView makeStatusBarView() {
         final Context context = mContext;
-
+         mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor("status_bar_show_battery_percent_outside"),
+                true, mBatteryLevelShow);
         updateDisplaySize(); // populates mDisplayMetrics
         updateResources();
 
@@ -914,6 +926,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         mLocationController = new LocationControllerImpl(mContext,
                 mHandlerThread.getLooper()); // will post a notification
         mBatteryController = createBatteryController();
+         mBatteryLevel = (TextView) mStatusBarView.findViewById(R.id.battery_level);
+        mBatteryLevel.setVisibility((Settings.System.getInt(context.getContentResolver(),
+                "status_bar_show_battery_percent_outside", 1) != 0) ? View.VISIBLE : View.GONE);
         mBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() {
             @Override
             public void onPowerSaveChanged(boolean isPowerSave) {
@@ -925,6 +940,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
             @Override
             public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
                 // noop
+                String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);
+                mBatteryLevel.setText(percentage);
+
             }
         });
         mNetworkController = new NetworkControllerImpl(mContext, mHandlerThread.getLooper());
@@ -3804,6 +3822,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         updateRowStates();
         mScreenPinningRequest.onConfigurationChanged();
         mNetworkController.onConfigurationChanged();
+         FontSizeUtils.updateFontSize(mBatteryLevel, R.dimen.battery_level_text_size);
     }
 
     @Override



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值