SystemUI 状态栏 system icon 和 notification icon 的修改

一、图片的问题 

android 原生的图标 状态栏 24dp - 48px
drawable - 24 x 24  矢量图(android:viewportWidth="24" android:viewportHeight="24")
xhdpi - 48 x 48
xxhdpi - 72 x 72
xxxhdpi - 96 x 96

 

二、

美工如果按照效果图切图比如: xhdpi 1280-720(stat_h - 24dp /48px)   --   可能会切的效果图 36px / icon_h


2.1 System Icon 

(1)  padding,缩放,大小

SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java


图标缩放比例:   private static final float SYSTEM_ICON_SCALE  

图标大小:

添加padding:

SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java

protected StatusBarIconView addIcon

protected StatusBarWifiView addSignalIcon

protected StatusBarMobileView addMobileIcon

添加 padding

 int padding = mContext.getResources().getDimensionPixelSize(R.dimen.status_bar_icon_padding);
 view.setPadding(padding,0,padding,0);

PS: 一开始在方法

protected LinearLayout.LayoutParams onCreateLayoutParams() {
    中设置了 padding 不知道为何没有生效


(2) 不显示的类型

system icon 黑名单:

public static final String ICON_BLACKLIST = "icon_blacklist";
public static ArraySet<String> getIconBlacklist(String blackListStr) {
        ArraySet<String> ret = new ArraySet<>();
        if (blackListStr == null) {
            //blackListStr = "rotate,headset";
        }
        String[] blacklist = blackListStr.split(",");
        for (String slot : blacklist) {
            if (!TextUtils.isEmpty(slot)) {
                ret.add(slot);
            }
        }
        return ret;
    }

 

2.2 通知图标

SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java

private float mIconScale                                  ---> 控制通知的图标比例



SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java

绘制大小
  private void updateIconScaleDimens() {
        Resources res = mContext.getResources();
        mStatusBarIconSize = res.getDimensionPixelSize(R.dimen.status_bar_icon_size);
        mStatusBarIconDrawingSizeDark =
                res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size_dark);
        mStatusBarIconDrawingSize =
                res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size);
        updateIconScale();
    }

三、图片的更改 PhoneStatusBarPolicy.java (系统的图标种类关键字 stat_sys)

蓝牙  stat_sys_data_bluetooth.xml  stat_sys_data_bluetooth_connected.xml
vpn   stat_sys_branded_vpn.xml  stat_sys_vpn_ic.xml
勿扰  stat_sys_dnd.xml  
热点  stat_sys_hotspot.xml
定位  stat_sys_location.xml
静音  stat_sys_ringer_silent.xml
震动  stat_sys_ringer_vibrate.xml
飞行模式 stat_sys_airplane_mode.xml
投影     stat_sys_cast.xml
闹钟     stat_sys_alarm
无sim卡  stat_sys_no_sims (高版本上未显示)
stat_sys_tty_mode
禅模式   stat_sys_zen_none    stat_sys_alarm_dim  stat_sys_zen_important

stat_sys_data_saver

有线网络 stat_sys_ethernet_fully.xml   stat_sys_ethernet.xml

无线网   

stat_sys_wifi_signal_0.xml  stat_sys_wifi_signal_0_fully.xml
stat_sys_wifi_in.xml  stat_sys_wifi_out

信号
stat_sys_signal_in  stat_sys_signal_out
3g  4g 等标识

8.0 之后 StatusBarSignalPolicy.java
8.0 之前 SignalClusterView.java


自己定义可使用图片
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:systemui="http://schemas.android.com/apk/res-auto" 
xmlns:app="http://schemas.android.com/apk/res/
com.android.email" android:src="@drawable/stat_sys_signal_in"/>


//流量上下
 private int getCardActivityId(boolean activityIn, boolean activityOut) {
        int activityId;
        if (activityIn && activityOut) {
            activityId = R.drawable.stat_sys_signal_inout_auto_mirrored;
        } else if (activityIn) {
            activityId = R.drawable.stat_sys_signal_in_auto_mirrored;
        } else if (activityOut) {
            activityId = R.drawable.stat_sys_signal_out_auto_mirrored;
        } else {
            activityId = R.drawable.stat_sys_signal_no_auto_mirrored;
        }
        return activityId;
    }


电池-原生有这样的配置,   
android/frameworks/base/core/res/res/drawable/stat_sys_battery.xml

BatteryService

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="4" android:drawable="@android:drawable/stat_sys_battery_0" />
    <item android:maxLevel="15" android:drawable="@android:drawable/stat_sys_battery_15" />
    <item android:maxLevel="35" android:drawable="@android:drawable/stat_sys_battery_28" />
    <item android:maxLevel="49" android:drawable="@android:drawable/stat_sys_battery_43" />
    <item android:maxLevel="60" android:drawable="@android:drawable/stat_sys_battery_57" />
    <item android:maxLevel="75" android:drawable="@android:drawable/stat_sys_battery_71" />
    <item android:maxLevel="90" android:drawable="@android:drawable/stat_sys_battery_85" />
    <item android:maxLevel="100" android:drawable="@android:drawable/stat_sys_battery_100" />
</level-list>


android 8.0 以上是通过 BatteryMeterView.java 绘制出来的

//如果图形较复杂可添加3套图片(1套平时状态 tint,  2套充电)

 private int getIconLocked(boolean charging) {
        if (charging) {
            //默认颜色极为白色
            if(mNonAdaptedForegroundColor == DarkIconDispatcher.DEFAULT_ICON_TINT){
                return  R.drawable.os_stat_sys_battery_charge_d;
            }else{
              //暗色模式
                return  R.drawable.os_stat_sys_battery_charge;
            }
         } else {

            // 普通的模式   

           return R.drawable.os_stat_sys_battery;
        }
    }

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值