1. 程式人生 > >安卓7.0上在狀態列上加電池百分比

安卓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


相關推薦

7.0狀態電池百分比

     》》》》》》     安卓7.0上的statusbar上是預設不帶電池百分比的。需要我們加上去。有兩個方法,先寫第一個方法    1. 在frameworks/base/packages/SystemUI/res/layout/system_icons.xml

popwindow 在7.0顯示位置錯誤以及在6.0下點選外部不能消失的情況解析

popwindow在日常使用的過程中頻率很高 ,一般用起來也是得心應手,但是也是有很多坑存在的,在這個版本的迭代中就遇到了一些問題,解決起來很簡單,但是以後開發中肯定要注意的 popwindow 出現的View not attached to window

PopupWindow在7.07.1系統位置顯示異常

做專案時發現Popupwindow在7.0及以上的裝置上顯示位置異常,6.0上及以下卻沒有問題: 如下圖所示 解決方式:重寫Popupwindow的showasdrop方法: /** * 建立時間: 2017/12/5. * 創 建 人:

android apk安裝包修改了之後在7.0系統無法安裝的解決辦法

我們在開發app的時候,往往在打包完之後還要進行分發。所以需要在安裝包中寫入一定的檔案。比如渠道或者動態新增啟動時預載入的資訊。但是現安卓開發一般用的是Android Studio ,而且Studio 版本一般都是2.2以上。問題的關鍵就是在這裡,在Studio 2.2以後

7.0手機遇到的app升級問題終極解決方案

 相容Android 7.0 App升級 一、在AndroidManifest.xml清單檔案中註冊Provider <provider    android:name="android.support.v4.content.FileProvider"    andr

專案實戰之:7.0優化下的全域性網路連線狀態監聽

須知:Android7.0起網路變化監聽隱式廣播被關閉 在 Android 7.0 版本中除了提供諸多多視窗支援、活動通知、後臺優化、訊息傳遞服務和Vulkan 等新特性和功能外,還對系統和 API 行為做出了各種變更,其中最重要的一點:Android7.0為了進行後臺的優化刪除了三

7.0拍照遇到 Uri暴露錯誤

meta 技術 () code hid con 目錄 view file 最近,項目又做到,調用攝像頭拍照獲取圖片這個功能。 用以前的代碼直接用,發現在Android7.0上使用時會出現問題。 Android6.0之後,動態申請權限已成常態。 調用攝像頭拍照獲取圖片這個功能

關於7.0及以上的Https請求抓包問題android:networkSecurityConfig

Android 7.0(API 級別 24)及更高版本預設只承認系統CA,所以預設是安全的,不需要配置。如果想要系統承認使用者自己安裝的CA,則修改配置(比如除錯時會需要抓包)。 面向 Android 6.0(API 級別 23)及更低版本應用的預設配置如下所示,這段配置的意思是,承認系

專案實戰之APP版本升級更新,適配7.0

前言 APP的版本升級主要分為兩種方式: 1.應用市場升級 2.應用內升級 而應用內升級的方式是目前大多數APP採用的升級更新方式。 應用內升級的模式 按照不同的業務需求又可以分為兩種: 1,強制性更新 如果APP有更新,那麼則彈出更新提示對話方塊,並且

實現沉浸式狀態,相容小米、魅族

現階段不是很忙,就總結一下自己都實現過的功能。這一篇總結安卓實現沉浸式狀態列 Android4.4(API 19) - Android 5.0(API 21): 這個階段可以實現沉浸式,但是表現得還不是很好,實現方式為: 通過FLAG_TRANSLUCENT_STATUS設定

7.0以上作業系統長按桌面logo建立快捷方式

本文已授權微信公眾號:鴻洋(hongyangAndroid)在微信公眾號平臺原創首發。 就在前幾天的一個晚上, Google召開了它的秋季釋出會,

獲取渠道名渠道id Android獲取裝置唯一標識的終極解決方法,防止7.0時崩潰問題

一,先說獲取渠道名(這裡以友盟為例) /* * 4.5.1新加渠道名欄位,用來傳給後臺去統計各個渠道下載量 * */ public static String getSource() { //獲取渠道名 Strin

7.0 WebView 載入網頁空白解決辦法

mainWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(W

7.0開啟相機(許可權與內容提供器)

本文大部分來自第二行程式碼,只是部分許可權問題改動與說明 其中主要問題就是安卓6.0許可權問題和7.0url問題。 首先需要設定許可權 <!-- 攝像頭 --> <uses-permission android:name="a

華為基於7.0的Emui5.0實戰技術開放日-成都、北京、廣州

華為釋出了基於安卓7.0的EMUI5.0,通過智慧學習系統優化安卓資源排程管理,可謂大顯身手。EMUI5.0是一款從UI設計到互動,再到效能各方面都有極大提升的系統。華為將在成都、北京、廣州舉辦三場EMUI5.0技術開放日,與資深極客、技術專家和花粉針對EMUI

手機下拉狀態的程式碼實現

1. 對於高版本的sdk, (16以上) 1 //高版本的通知欄,最低要求sdk版本為16 2 NotificationManager nm = (NotificationMana

解決7.0系統裁剪圖片出錯問題

        Android7.0中為了提高私有檔案的安全性,對file:// Uri 型別的Uri做出了限制,導致一些APP的功能無法正常使用。前幾天的一個頭像裁剪問題被提上了日程,開始只是修改了拍照的Uri,忘記了還要裁剪,因為直接使用的系統裁剪導致裁剪出了問題。下面

小米Note標配版 雙網通刷原生7.0教程(詳細)

小米note手機用了一段時間後,開始儲存不夠用了,於是想重新刷一次機,順便清洗一下記憶體。 首先備份好手機的資料,由於我手機玩遊戲建立了很多qq的小號,所以我先把這些小號備份一下,然後就是微信備份!把資料備份到電腦端。 然後開始正式工作: 1.下載ROM包,我下載的是秋大

開發之設定狀態的顏色

要求:實現設定狀態列的顏色需要至少4.4.2(API 19以上)。在這個版本一下,沒有任何的API可以實現這樣的功能。具體實現方式如下:一、Android 4.4.2 新增了一個特性,就是可以設定系統狀態為半透明。設定方法有兩種:1、通過style新增屬性:<item

解決7.0拍照,相簿選擇崩潰的問題(包括壓縮圖片在內)

在今天,專案的功能開發的告一段落了,回顧之前遇到的難題,覺得有必要在部落格中記錄一下,也方便下次自己能快速解決問題,同時,也能給遇到同樣問題的人一個參考。 這問題就是當用戶使用android 7.0系統的手機進行拍照的時候,崩潰的問題。崩潰的原因,網上有很多詳