深圳网站官网建设方案,商业网站建设咨询,网上询价,公关负面处理公司Android 原生设计中在锁屏界面会显示运营商名称#xff0c;用户界面中#xff0c;大概是基于 icon 数量长度显示考虑#xff0c;对运营商名称不作显示。但是国内基本都加上运营商名称。对图标显示长度优化基本都是#xff1a;缩小运营商字体、限制字数长度、信号图标压缩上…Android 原生设计中在锁屏界面会显示运营商名称用户界面中大概是基于 icon 数量长度显示考虑对运营商名称不作显示。但是国内基本都加上运营商名称。对图标显示长度优化基本都是缩小运营商字体、限制字数长度、信号图标压缩上下叠加等。
SIM卡的 icon 对应的文件是 StatusBarMobileView默认包含信号格、漫游、网络制式、上下行等图标。只需要在默认基础上添加运营商名称View。 一、添加运营商名称view
在信号格后面增加运营商名称System中对文字图标显示自定义 AutoMarqueeTextView 类主要增加跑马灯和省略号的样式自动切换处理我们使用 AutoMarqueeTextView 显示名称即可。
//frameworks/base/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xmlFrameLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenter_verticalcom.android.systemui.statusbar.AnimatedImageViewandroid:idid/mobile_signalandroid:layout_heightwrap_contentandroid:layout_widthwrap_contentsystemui:hasOverlappingRenderingfalse/ImageViewandroid:idid/mobile_roamingandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:srcdrawable/stat_sys_roamingandroid:contentDescriptionstring/data_connection_roamingandroid:visibilitygone //FrameLayoutcom.android.systemui.util.AutoMarqueeTextViewandroid:idid/qs_carrier_textandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_weight1android:textAppearancestyle/TextAppearance.QS.Statusandroid:textDirectionlocaleandroid:textSize8dpandroid:marqueeRepeatLimitmarquee_foreverandroid:singleLinetrueandroid:maxEms4/
然后调整好文字大小和长度适配。 二、对网络制式、上下行漫游图标长度压缩
默认图标都是从左到右排序的这样会导致整体icon太长状态栏放不下从而导致icon被收到省略号中无法显示。
//frameworks/base/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xmlcom.android.keyguard.AlphaOptimizedLinearLayoutandroid:idid/mobile_groupandroid:layout_widthwrap_contentandroid:layout_heightmatch_parentandroid:gravitycenter_verticalandroid:orientationhorizontal ImageViewandroid:idid/mobile_volteandroid:layout_heightwrap_contentandroid:layout_widthwrap_contentandroid:visibilitygoneandroid:paddingEnd2dp/LinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightmatch_parentandroid:orientationverticalFrameLayoutandroid:layout_height10dpandroid:layout_width10dpImageViewandroid:idid/mobile_typeandroid:layout_heightwrap_contentandroid:layout_widthwrap_contentandroid:layout_marginTop1dpandroid:visibilitygone //FrameLayoutFrameLayoutandroid:idid/inout_containerandroid:layout_height10dpandroid:layout_width10dpandroid:layout_gravitycenter_horizontalImageViewandroid:idid/mobile_inandroid:layout_height10dpandroid:layout_width10dpandroid:srcdrawable/ic_activity_downandroid:visibilitygone/ImageViewandroid:idid/mobile_outandroid:layout_height10dpandroid:layout_width10dpandroid:srcdrawable/ic_activity_upandroid:visibilitygone//FrameLayout/LinearLayoutSpaceandroid:idid/mobile_roaming_spaceandroid:layout_heightmatch_parentandroid:layout_width0dpandroid:visibilitygone/
把子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 设置隐藏即可。