安卓7.0上在狀態列上加電池百分比
》》》》》》
安卓7.0上的statusbar上是預設不帶電池百分比的。需要我們加上去。有兩個方法,先寫第一個方法
1. 在frameworks/base/packages/SystemUI/res/layout/system_icons.xml中添加布局檔案:
2. 在frameworks/base/packages/SystemUI/res/values/strings.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"/>
<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.0及7.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系統的手機進行拍照的時候,崩潰的問題。崩潰的原因,網上有很多詳