当前位置: 首页 > news >正文

Android 状态栏显示运营商名称

Android 原生设计中在锁屏界面会显示运营商名称,用户界面中,大概是基于 icon 数量长度显示考虑,对运营商名称不作显示。但是国内基本都加上运营商名称。对图标显示长度优化基本都是:缩小运营商字体、限制字数长度、信号图标压缩上下叠加等。

SIM卡的 icon 对应的文件是 StatusBarMobileView,默认包含信号格、漫游、网络制式、上下行等图标。只需要在默认基础上,添加运营商名称View。

 一、添加运营商名称view

在信号格后面增加运营商名称,System中对文字图标显示自定义 AutoMarqueeTextView 类(主要增加跑马灯和省略号的样式自动切换)处理,我们使用 AutoMarqueeTextView 显示名称即可。

//frameworks/base/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml<FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"><com.android.systemui.statusbar.AnimatedImageViewandroid:id="@+id/mobile_signal"android:layout_height="wrap_content"android:layout_width="wrap_content"systemui:hasOverlappingRendering="false"/><ImageViewandroid:id="@+id/mobile_roaming"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/stat_sys_roaming"android:contentDescription="@string/data_connection_roaming"android:visibility="gone" /></FrameLayout><com.android.systemui.util.AutoMarqueeTextViewandroid:id="@+id/qs_carrier_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:textAppearance="@style/TextAppearance.QS.Status"android:textDirection="locale"android:textSize="8dp"android:marqueeRepeatLimit="marquee_forever"android:singleLine="true"android:maxEms="4"/>

然后调整好文字大小和长度适配。

二、对网络制式、上下行漫游图标长度压缩

默认图标都是从左到右排序的,这样会导致整体icon太长,状态栏放不下,从而导致icon被收到省略号中无法显示。

//frameworks/base/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml<com.android.keyguard.AlphaOptimizedLinearLayoutandroid:id="@+id/mobile_group"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center_vertical"android:orientation="horizontal" ><ImageViewandroid:id="@+id/mobile_volte"android:layout_height="wrap_content"android:layout_width="wrap_content"android:visibility="gone"android:paddingEnd="2dp"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical"><FrameLayoutandroid:layout_height="10dp"android:layout_width="10dp"><ImageViewandroid:id="@+id/mobile_type"android:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_marginTop="1dp"android:visibility="gone" /></FrameLayout><FrameLayoutandroid:id="@+id/inout_container"android:layout_height="10dp"android:layout_width="10dp"android:layout_gravity="center_horizontal"><ImageViewandroid:id="@+id/mobile_in"android:layout_height="10dp"android:layout_width="10dp"android:src="@drawable/ic_activity_down"android:visibility="gone"/><ImageViewandroid:id="@+id/mobile_out"android:layout_height="10dp"android:layout_width="10dp"android:src="@drawable/ic_activity_up"android:visibility="gone"/></FrameLayout></LinearLayout><Spaceandroid:id="@+id/mobile_roaming_space"android:layout_height="match_parent"android:layout_width="0dp"android:visibility="gone"/>

把子view直接的space都设置为0,再把4g图标和上下行图标缩小放到一列中。

 三、 运营商名称显示

获取运营商名称接口常用有两种

SubscriptionInfo.getCarrierName()
SubscriptionInfo.getDisplayName()

区别在第一种显示的内容更多,类似:CHN-CT中国电信。这里一般只想显示中国电信,使用第二个方法就行。

//frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.javaprivate DualToneHandler mDualToneHandler;private ImageView mVolte;
+    private TextView mCarrierText;
+    private SubscriptionManager mSubscriptionManager;public static StatusBarMobileView fromContext(Context context, String slot) {LayoutInflater inflater = LayoutInflater.from(context);
@@ -80,6 +85,7 @@public StatusBarMobileView(Context context, AttributeSet attrs) {super(context, attrs);
+        mSubscriptionManager = SubscriptionManager.from(context);}public StatusBarMobileView(Context context, AttributeSet attrs, int defStyleAttr) {
@@ -113,6 +119,9 @@mOut = findViewById(R.id.mobile_out);mInoutContainer = findViewById(R.id.inout_container);mVolte = findViewById(R.id.mobile_volte);
+        mCarrierText = findViewById(R.id.qs_carrier_text);
+        mCarrierText.setText("");mMobileDrawable = new SignalDrawable(getContext());mMobile.setImageDrawable(mMobileDrawable);
@@ -159,6 +168,11 @@setVisibility(View.INVISIBLE);requestLayout();}
+        SubscriptionInfo subscriptionInfo = mSubscriptionManager.getActiveSubscriptionInfo(mState.subId);
+        if (subscriptionInfo != null) {
+            CharSequence cName = subscriptionInfo.getDisplayName();
+            mCarrierText.setText(cName);
+        }}private void initViewState() {
@@ -194,6 +208,11 @@}else {mVolte.setVisibility(View.GONE);}
+        SubscriptionInfo subscriptionInfo = mSubscriptionManager.getActiveSubscriptionInfo(mState.subId);
+        if (subscriptionInfo != null) {
+            CharSequence cName = subscriptionInfo.getDisplayName();
+            mCarrierText.setText(cName);
+        }}

StatusBarMobileView 中动态获取刷新运营商名称。针对状态栏中icon颜色,设计是有要求的,需要根据背景的变化进行适应。在浅色背景显示深色,深色背景显示浅色,有一定对比度才行。

//frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.javaprivate boolean updateState(MobileIconState state) {
@@ -258,6 +277,8 @@mMobileRoaming.setImageTintList(color);mDotView.setDecorColor(tint);mDotView.setIconColor(tint, false);
+        int foreground = mDualToneHandler.getSingleColor(intensity);
+        mCarrierText.setTextColor(foreground);}@Override
@@ -288,6 +309,7 @@@Overridepublic void setDecorColor(int color) {mDotView.setDecorColor(color);
+        mCarrierText.setTextColor(color);}

四、隐藏原生锁屏界面运营商显示

原生设计会在锁屏界面只显示SIM卡运营商。状态栏增加自定义的显示后,锁屏界面可以删除。对应 View 

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java

中的 mCarrierLabel ,设置隐藏即可。

相关文章:

Android 状态栏显示运营商名称

Android 原生设计中在锁屏界面会显示运营商名称&#xff0c;用户界面中&#xff0c;大概是基于 icon 数量长度显示考虑&#xff0c;对运营商名称不作显示。但是国内基本都加上运营商名称。对图标显示长度优化基本都是&#xff1a;缩小运营商字体、限制字数长度、信号图标压缩上…...

10.Xaml ListBox控件

1.运行界面 2.运行源码 a.Xaml 源码 <Grid Name="Grid1"><!--IsSelected="True" 表示选中--><ListBox x:Name="listBo...

基于vue3和element-plus的省市区级联组件

git地址&#xff1a;https://github.com/ht-sauce/elui-china-area-dht 使用:npm i elui-china-area-dht 默认使用 使用方法 <template><div class"app"><!--默认使用--><elui-china-area-dht change"onChange"></elui-china…...

Paper: 利用RNN来提取恶意软件家族的API调用模式

论文 摘要 恶意软件家族分类是预测恶意软件特征的好方法&#xff0c;因为属于同一家族的恶意软件往往有相似的行为特征恶意软件检测或分类方法分静态分析和动态分析两种&#xff1a; 静态分析基于恶意软件中包含的特定签名进行分析&#xff0c;优点是分析的范围覆盖了整个代码…...

sdkman 安装以及 graalvm安装

sdkman安装以及graalvm安装全过程, (可能需要梯子) tiamTiam-Lenovo:~$ curl -s "https://get.sdkman.io" | bash-syyyyyyys:/yho: -yd./yh/ m..oho. hy ..sh/ :N -/…...

如何正确使用 WEB 接口的 HTTP 状态码和业务状态码?

当设计和开发 Web 接口时&#xff0c;必然会和 HTTP 状态码与业务状态码这两个概念打交道。很多同学可能没有注意过这两个概念或者两者的区别&#xff0c;做得稀里糊涂&#xff0c;接下来详细讲解下二者的定义、区别和使用方法。 HTTP 状态码 HTTP 状态码是由 HTTP 协议定义的…...

Spark【Spark SQL(三)DataSet】

DataSet DataFrame 的出现&#xff0c;让 Spark 可以更好地处理结构化数据的计算&#xff0c;但存在一个问题&#xff1a;编译时的类型安全问题&#xff0c;为了解决它&#xff0c;Spark 引入了 DataSet API&#xff08;DataFrame API 的扩展&#xff09;。DataSet 是分布式的数…...

制作立体图像实用软件:3DMasterKit 10.7 Crack

3DMasterKit 软件专为创建具有逼真 3D 和运动效果的光栅图片而设计&#xff1a;翻转、动画、变形和缩放。 打印机、广告工作室、摄影工作室和摄影师将发现 3DMasterKit 是一种有用且经济高效的解决方案&#xff0c;可将其业务扩展到新的维度&#xff0c;提高生成的 3D 图像和光…...

高校 Web 站点网络安全面临的主要的威胁

校园网 Web 站点的主要安全威胁来源于计算机病毒、内部用户恶意攻击和 破坏、内部用户非恶意的错误操作和网络黑客入侵等。 2.1 计算机病毒 计算机病毒是指编制者在计算机程序中插入的破坏计算机功能或者数据&#xff0c; 影响计算机使用并且能够自我复制的一组计算机指令或…...

vue前端解决跨域

1,首先 axios请求&#xff0c;看后端接口路径&#xff0c;http://122.226.146.110:25002/api/xx/ResxxList&#xff0c;所以baseURL地址改成 ‘/api’ let setAxios originAxios.create({baseURL: /api, //这里要改掉timeout: 20000 // request timeout}); export default s…...

【Cicadaplayer】解码线程及队列实现

4.4分支https://github.com/alibaba/CicadaPlayer/blob/release/0.4.4/framework/codec/ActiveDecoder.h对外:送入多个包,获取一个帧 int send_packet(std::unique_ptr<IAFPacket> &packet, uint64_t timeOut) override;int getFrame(std::u...

把文件上传到Gitee的详细步骤

目录 第一步&#xff1a;创建一个空仓库 第二步&#xff1a;找到你想上传的文件所在的地址&#xff0c;打开命令窗口&#xff0c;git init 第三步&#xff1a;git add 想上传的文件 &#xff0c;git commit -m "给这次提交取个名字" 第四步&#xff1a;和咱们在第…...

基于keras中Lenet对于mnist的处理

文章目录 MNIST导入必要的包加载数据可视化数据集查看数据集的分布开始训练画出loss图画出accuracy图 使用数据外的图来测试图片可视化转化灰度图的可视化可视化卷积层的特征图第一层卷积 conv1 和 pool1第二层卷积 conv2 和 pool2 MNIST MNIST&#xff08;Modified National …...

Python爬虫 教程:IP池的使用

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施&#xff0c;例如很多网站会检测某一段时间某个IP的访问次数&#xff0c;如果访问频率…...

Ansible之playbook剧本

一、playbook概述1.1 playbook 介绍1.2 playbook 组成部分 二、playbook 示例2.1 playbook 启动及检测2.2 实例一2.3 vars 定义、引用变量2.4 指定远程主机sudo切换用户2.5 when条件判断2.6 迭代2.7 Templates 模块1.先准备一个以 .j2 为后缀的 template 模板文件&#xff0c;设…...

unique_ptr的大小探讨

unique_ptr大小和删除器有很大关系&#xff0c;具体区别看如下代码的分析。不要让unique_ptr占用的空间太大&#xff0c;否则不会达到裸指针同样的效果。 #include <iostream> #include <memory> using namespace std;class Widget {int m_x;int m_y;int m_z;publ…...

人工智能TensorFlow PyTorch物体分类和目标检测合集【持续更新】

1. 基于TensorFlow2.3.0的花卉识别 基于TensorFlow2.3.0的花卉识别Android APP设计_基于安卓的花卉识别_lilihewo的博客-CSDN博客 2. 基于TensorFlow2.3.0的垃圾分类 基于TensorFlow2.3.0的垃圾分类Android APP设计_def model_load(img_shape(224, 224, 3)_lilihewo的博客-CS…...

ElementPlus·面包屑导航实现

面包屑导航 使用vue3中的UI框架elementPlus的 <el-breadcrumb> 实现面包屑导航 <template><!-- 面包屑 --><div class"bread-container" ><el-breadcrumb separator">"><el-breadcrumb-item :to"{ path:/ }&quo…...

【项目管理】PM vs PMO 18点区别

导读&#xff1a;项目经理跟PMO主要有哪些区别&#xff1f;首先从定义上了解&#xff0c;然后根据其他维度进行对比分析&#xff0c;基本可以了解这二者的区别&#xff0c;文中罗列18点区别供各位参考。 目录 1、定义 1.1 PMO 1.2 PM 2、两者区别 2.1 ROI 2.2 项目成功率…...

13 Python使用Json

概述 在上一节&#xff0c;我们介绍了如何在Python中使用xml&#xff0c;包括&#xff1a;SAX、DOM、ElementTree等内容。在这一节&#xff0c;我们将介绍如何在Python中使用Json。Json的英文全称为JavaScript Object Notation&#xff0c;中文为JavaScript对象表示法&#xff…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...