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 ,设置隐藏即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/123437.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例聚焦:F5怎么样提升游戏玩家体验?

对手机游戏市场有过了解的小伙伴&#xff0c;定然对Deltatech Gaming Limited这个公司不会陌生。作为印度在线游戏和娱乐行业的领跑者&#xff0c;两个最受欢迎的多人游戏应用分别为多人游戏的 “Addagames” 和扑克类游戏 “Adda52” &#xff0c;它们会定期举办在线联赛。而这…

php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法非常简单

php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法&#xff0c;主要使用到了 php 的时间函数 mktime。下面首先还是以示例说明如何使用 mktime 获取今日、昨日、上周、本月的起始时间戳和结束时间戳&#xff0c;然后在介绍一下 mktime 函数作用和用法。非常简单哦…

Windows云服务器 PHP搭建网站外网无法访问的问题

前言&#xff1a;本人在华为云上租了一台windows的云主机&#xff0c;可以远程访问桌面的那种&#xff0c;然后想搭个网站&#xff0c;最开始想到的是IIS&#xff0c;测试了下用html的文件&#xff0c;没有问题。但是&#xff0c;php文件却不能用&#xff0c;因为少了PHP环境。…

Layer 2盛夏已至,StarkNet如何实现价值跃迁?

作者&#xff5c;Jason Jiang Layer 2概念在2023年夏天迎来爆发。Coinbase、ConsenSys等加密巨头纷纷下场&#xff0c;其部署的原生L2解决方案Base、Linea在过去两个月内相继完成主网上线&#xff1b;被誉为L2 四大天王之一的StarkNet也在夏天顺利完成“量子跃迁”升级&#x…

JavaSE,无框架实现贪吃蛇

JavaSE&#xff0c;无框架实现贪吃蛇 文章目录 JavaSE&#xff0c;无框架实现贪吃蛇1.整体思考2.可能的难点思考2.1 如何表示游戏界面2.2 如何渲染游戏界面2.3 如何让游戏动起来2.4 蛇如何移动 3.流程图制作4.模块划分5.模块完善5.0常量优化5.1监听键盘服务i.输入存储ii.键盘监…

Direct3D颜色

在Direct3D中颜色用RGB三元组来表示&#xff0c;RGB数据可用俩种不同的结构来保存&#xff0c;第一种是D3DCOLOR&#xff0c;它实际上与DWORD类型完全相同&#xff0c;共有32位&#xff0c;D3DCOLOR类型种的各位被分成四个8位项&#xff0c;每项存储了一种颜色分量的亮度值。 由…

JDK7多线程并发环境HashMap死循环infinite loop,CPU拉满100%,Java

JDK7多线程并发环境HashMap死循环infinite loop&#xff0c;CPU拉满100%&#xff0c;Java HashMap底层数据实现是数组链表&#xff0c;链表在哈希碰撞后装入新数据&#xff0c;像是一个桶。 HashMap在JDK7的实现中&#xff0c;并发环境存在死循环infinite loop问题。导致的结果…

DAY-01--分布式微服务基础概念

一、项目简介 了解整体项目包含后端、前端、周边维护。整个项目的框架知识。 二、分布式基础概念 1、微服务 将应用程序 基于业务 拆分为 多个小服务&#xff0c;各小服务单独部署运行&#xff0c;采用http通信。 2、集群&分布式&节点 集群是个物理形态&#xff0c;…

Redis:StringRedisTemplate简介

&#xff08;笔记总结自b站黑马程序员课程&#xff09; 为了在反序列化时知道对象的类型&#xff0c;JSON序列化器会将类的class类型写入json结果中&#xff0c;存入Redis&#xff0c;会带来额外的内存开销。 为了减少内存的消耗&#xff0c;我们可以采用手动序列化的方式&am…

【Python】【Fintech】用Python和蒙特卡洛法预测投资组合未来收益

【背景】 想利用蒙特卡洛方法和yahoo,stooq等财经网站上的数据快速预测特定portfolio的收益。 【分析】 整个程序的功能包括 读取json中的portfolio组合创建蒙特卡洛模拟预测收益的算法创建从财经网站获得特定投资组合数据,并根据2的算法获得该Index或Portfolio收益预测结…

机器学习的第一节基本概念的相关学习

目录 1.1 决策树的概念 1.2 KNN的概念 1.2.1KNN的基本原理 1.2.2 流程&#xff1a; 1.2.3 优缺点 1.3 深度学习 1.4 梯度下降 损失函数 1.5 特征与特征选择 特征选择的目的 1.6 python中dot函数总结 一维数组的点积&#xff1a; 二维数组&#xff08;矩阵&#xff09;的乘法&am…

Python代码雨

系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心https://want…

python通过docker打包执行

背景 正常情况下,python脚本执行需要安装有python环境,那python环境虽然也可以通过移植的方法来安装,那总归是比较麻烦的,下面通过docker打包的方式来执行python脚本 1、安装python镜像 准备两个文件即可,dockerfile、requirements.txt两个文件的内容分别如下 同目录下…

肖sir__设计测试用例方法之梳理测试点11(微信发红包)

梳理测试点 讲解测试点&#xff1a; 1、定义&#xff1a;测试点就是测试的功能点&#xff0c;是指在软件测试过程中需要覆盖或关注的特定功能&#xff0c;特性或场景。 2、流程&#xff1a;拿到需求&#xff0c;梳理测试点(一般使用xmind图梳理)&#xff0c;在根据测试点使用测…

Python爬虫-爬取文档内容,如何去掉文档中的表格,并保存正文内容

前言 本文是该专栏的第58篇,后面会持续分享python爬虫干货知识,记得关注。 做过爬虫项目的同学,可能或多或少爬取过文档数据,比如说“政务网站,新闻网站,小说网站”等平台的文档数据。爬取文档数据,笔者这里就不过多详述,而本文,笔者将主要介绍在爬取文档数据的过程中…

API接口已经成为企业应用程序开发和管理的重要组成部分

API接口的价值 随着数字化时代的到来&#xff0c;API接口已经成为企业应用程序开发和管理的重要组成部分。API不仅是一种连接不同系统、提高数据流动性和促进协作的工具&#xff0c;而且还是一种重要的商业战略&#xff0c;可以为组织带来许多实际的价值。本文将探讨API接口的…

端口扫描-安全体系-网络安全技术和协议

端口扫描-安全体系-网络安全技术和协议 端口扫描信息安全的保证体系和评估方法网络安全技术网络攻击和威胁(重要)网络安全协议 端口扫描 全TCP连接:三次握手 半打开式扫描:前两次握手 FIN扫描:不用建立TCP连接 第三方扫描: 拒绝服务攻击有: 同步包风暴ICMP攻击SNMP攻击 都是修改…

LeetCode 15 三数之和

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 // 1. 排序双指针 // 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]nums[k]是否等于-nums[i] // 3. 细节问题&#xff1a;由于题目中是不可以包含重复的三元组的…

提升效率:PostgreSQL准确且快速的数据对比方法

作为一款强大而广受欢迎的开源关系型数据库管理系统&#xff0c;PostgreSQL 在数据库领域拥有显著的市场份额。其出色的可扩展性、稳定性使其成为众多企业和项目的首选数据库。而在很多场景下&#xff08;开发|生产环境同步、备份恢复验证、数据迁移、数据合并等&#xff09;&a…

Maven 必备技能:MAC 系统下 JDK和Maven 安装及环境变量配置详细讲解

开发中难免因系统问题或者版本变更反复折腾JDK和Maven环境变量&#xff0c;干脆写个笔记备忘个&#xff0c;也方便小伙伴们节省时间。 JDK安装与环境变量配置 1.官网下载jdk mac安装包: Java Downloads | Oracle " https://www.oracle.com/java/technologies/downloads…