SystemUI中添加系统新图标

作者 : admin 本文共2685个字,预计阅读时间需要7分钟 发布时间: 2024-06-10 共2人阅读

文章目录

  • 描述
  • 实现步骤
    • framework中修改
    • SystemUI中修改

描述

在系统状态栏的右侧添加一个自定义图标

实现步骤

framework中修改

1.定义右侧系统图标的插槽
frameworks/base/core/res/res/values/config.xml文件中内容修改如下所示,定义的图标为status_bar_custom_icon

 <string-array name="config_statusBarIcons">
 		...
		<item><xliff:g id="id">@string/status_bar_custom_icon</xliff:g></item>
		...
  </string-array>
  
<string translatable="false" name="status_bar_custom_icon">custom_icon</string>

其中config_statusBarIcons中子元素的顺序表示右侧状态栏图标显示的顺序。

2.引用资源
frameworks/base/core/res/res/values/symbols.xml中添加status_bar_custom_icon,否则无法引用到该资源。

   <java-symbol type="string" name="status_bar_custom_icon" />

SystemUI中修改

1.PhoneStatusBarPolicy.java的修改
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java

--- a/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -97,6 +97,7 @@ public class PhoneStatusBarPolicy
     private final String mSlotDataSaver;
     private final String mSlotLocation;
     private final String mSlotSensorsOff;
+    private final String mSlotCustomIcon;
 
     private final Context mContext;
     private final Handler mHandler = new Handler();
@@ -123,6 +124,7 @@ public class PhoneStatusBarPolicy
     private boolean mZenVisible;
     private boolean mVolumeVisible;
     private boolean mCurrentUserSetup;
+    private boolean mCustomIconVisible;
 
     private boolean mManagedProfileIconVisible = false;
 
@@ -231,6 +233,12 @@ public class PhoneStatusBarPolicy
         mIconController.setIconVisibility(mSlotSensorsOff,
                 mSensorPrivacyController.isSensorPrivacyEnabled());
 
+        // custom icon
+        mSlotCustomIcon = context.getString(com.android.internal.R.string.status_bar_custom_icon);
+        mCustomIconVisible = true;
+        mIconController.setIcon(mSlotCustomIcon,R.drawable.sys_custom_icon,null);
+        mIconController.setIconVisibility(mSlotCustomIcon,mCustomIconVisible);
+
         mRotationLockController.addCallback(this);
         mBluetooth.addCallback(this);
         mProvisionedController.addCallback(this);

2.sys_custom_icon.xml内容如下所示,这里面为了方便我使用的是蓝牙图标信息

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="17dp"
    android:height="17dp"
    android:viewportWidth="17.0"
    android:viewportHeight="17.0">
    <group
        android:translateY="0.5"
        android:translateX="0.5" >
        <path
            android:pathData="M8.84,8l2.62,-2.62c0.29,-0.29 0.29,-0.75 0,-1.04L8.33,1.22L8.31,1.2c-0.3,-0.28 -0.76,-0.26 -1.03,0.04c-0.13,0.13 -0.2,0.31 -0.2,0.5v4.51L4.24,3.4c-0.29,-0.29 -0.74,-0.29 -1.03,0s-0.29,0.74 0,1.03L6.78,8l-3.56,3.56c-0.29,0.29 -0.29,0.74 0,1.03s0.74,0.29 1.03,0l2.83,-2.83v4.51c0,0.4 0.33,0.73 0.73,0.73c0.18,0 0.36,-0.07 0.5,-0.2l0.03,-0.03l3.12,-3.12c0.29,-0.29 0.29,-0.75 0,-1.04L8.84,8zM8.47,6.37V3.36l1.5,1.5L8.47,6.37zM8.47,12.63V9.62l1.5,1.5L8.47,12.63z"
            android:fillColor="#FFFFFF"/>
    </group>
</vector>

这样右侧添加新图标的功能就完成了

本站无任何商业行为
个人在线分享 » SystemUI中添加系统新图标
E-->