Android系统:SystemUi需要注意的一些知识点
2016-12-09 17:45
405 查看
一:Google CDD对状态栏上system icon和notification icon颜色规定
从Android 4.4开始,Google在Compatibility Definition Document(简称CDD)中规定:
状态栏右侧显示的system status icon和左侧的notification icon颜色须是白色;只有表示异常或者警示状态时,可以用其他颜色icon,例如:低电量提示icon.
二:切换系统语言,拉下状态栏发现状态栏内容没有同步更新
切换系统语言,拉下状态栏发现状态栏内容没有同步更新
例如:
手机插入USB,切换系统语言之后,下状态栏发现,USB相关的状态栏通知内容没有同步更新,还是切换前的语言文字内容
这是Google default design,google原生对比机nexus是一样的行为现象。因为:
1. Statusbar 无法控制是否改语言,只负责显示App发送的通知中所携带的字串和图片内容。
2. 如果需要翻译由各个app决定。
3. 到底变不变对于end users来说都是可以接受的,因为改变语言是主动行为,user是可以接受某条临时notification没有变化的情况的
三:如何让通知不被清除或者点击后不消失?
APP发送通知后,点击clear按钮,如何让通知不被清除?或者点击通知后,通知不消失?
APP发送通知时,通知需要添加flag:
notification.flags |= Notification.FLAG_ONGOING_EVENT;
或者
notification.flags |= Notification.FLAG_NO_CLEAR;
四:如何修改navigationbar上按键的显示顺序
Navigation bar的layout定义在Navigation_bar.xml
(frameworks\base\packages\systemui\res\layout)下。
三个虚拟按键被包含在android:orientation="horizontal"的LinearLayout中,按照定义顺序默认
从左至右依次显示BACK, HOME, RECENT。如需改变三个按钮的排列顺序,只需调整他们在
LinearLayout中的定义位置即可。
五:Notification列表中的日期格式和Setting的不一致
在Setting的日期设置中选择一个日期格式,如下图:
但是发现通知栏列表中的日期格式显示和选择的不一致,如下图:
这个是google设计的默认问题,按照如下修改可以解决,
DateTimeView.java(frameworks/base/core/java/android/widget)
六:Android L之后,状态栏图标资源的编辑
Android L之后,google逐渐采用VectorDrawable这种矢量图代替传统的png应用到状态栏上。
矢量图的优点是与像素无关,systemUI的矢量图统一放在frameworks\base\packages\SystemUI\res\drawable路径下,
可以将它缩放到任意大小和以任意分辨率在输出设备上打印出来,都不会影响清晰度。
最新版本的Android Studio支持解析xml文件描述的矢量图所输出的图片样式。
客户如果想客制化状态栏上的矢量图,有以下方法:
1. 用png代替。 谨记需提供不同分辨率设备所需的png资源,放在对应density的的res\drawable_xxx 路径下。
2. 制作xml矢量图。google未提供制作工具,目前市面上有收费软件Adobe Illustrator (AI)CS6可以制作,如果有兴趣可以向
mtk提交e-service申请该工具参考文档。标题注明SystemUI 关键字。
七:关于状态栏的电量百分比
关于状态栏中的电量百分比,包括显示或者隐藏电量百分比
一,KK之前:
通知栏电量百分比是CMCC定制的,只有TDD的项目才会有,如果要去掉,可以修改
mediate/operator/op01/packages/apps/plugins/res/vaules/default.xml
def_battery_percentage_op01 修改为false
二,KK后:
目前KK,L上默认不显示百分比!在QS那里显示
三,L和M版本上添加显示电量百分比办法:
1, 添加view
修改路径:frameworks/base/packages/SystemUI/res/layout/Status_bar.xml
添加代码路径:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
持续更新中...
从Android 4.4开始,Google在Compatibility Definition Document(简称CDD)中规定:
状态栏右侧显示的system status icon和左侧的notification icon颜色须是白色;只有表示异常或者警示状态时,可以用其他颜色icon,例如:低电量提示icon.
二:切换系统语言,拉下状态栏发现状态栏内容没有同步更新
切换系统语言,拉下状态栏发现状态栏内容没有同步更新
例如:
手机插入USB,切换系统语言之后,下状态栏发现,USB相关的状态栏通知内容没有同步更新,还是切换前的语言文字内容
这是Google default design,google原生对比机nexus是一样的行为现象。因为:
1. Statusbar 无法控制是否改语言,只负责显示App发送的通知中所携带的字串和图片内容。
2. 如果需要翻译由各个app决定。
3. 到底变不变对于end users来说都是可以接受的,因为改变语言是主动行为,user是可以接受某条临时notification没有变化的情况的
三:如何让通知不被清除或者点击后不消失?
APP发送通知后,点击clear按钮,如何让通知不被清除?或者点击通知后,通知不消失?
APP发送通知时,通知需要添加flag:
notification.flags |= Notification.FLAG_ONGOING_EVENT;
或者
notification.flags |= Notification.FLAG_NO_CLEAR;
四:如何修改navigationbar上按键的显示顺序
Navigation bar的layout定义在Navigation_bar.xml
(frameworks\base\packages\systemui\res\layout)下。
三个虚拟按键被包含在android:orientation="horizontal"的LinearLayout中,按照定义顺序默认
从左至右依次显示BACK, HOME, RECENT。如需改变三个按钮的排列顺序,只需调整他们在
LinearLayout中的定义位置即可。
五:Notification列表中的日期格式和Setting的不一致
在Setting的日期设置中选择一个日期格式,如下图:
但是发现通知栏列表中的日期格式显示和选择的不一致,如下图:
这个是google设计的默认问题,按照如下修改可以解决,
DateTimeView.java(frameworks/base/core/java/android/widget)
private DateFormat getDateFormat() { String format = Settings.System.getString(getContext().getContentResolver(), Settings.System.DATE_FORMAT); if (format == null || "".equals(format)) { return DateFormat.getDateInstance(DateFormat.SHORT); } else { try { //return new SimpleDateFormat(format);///注释此行,使用下面的替代 return android.text.format.DateFormat.getDateFormat(getContext()); } catch (IllegalArgumentException e) { // If we tried to use a bad format string, fall back to a default. return DateFormat.getDateInstance(DateFormat.SHORT); } } }
六:Android L之后,状态栏图标资源的编辑
Android L之后,google逐渐采用VectorDrawable这种矢量图代替传统的png应用到状态栏上。
矢量图的优点是与像素无关,systemUI的矢量图统一放在frameworks\base\packages\SystemUI\res\drawable路径下,
可以将它缩放到任意大小和以任意分辨率在输出设备上打印出来,都不会影响清晰度。
最新版本的Android Studio支持解析xml文件描述的矢量图所输出的图片样式。
客户如果想客制化状态栏上的矢量图,有以下方法:
1. 用png代替。 谨记需提供不同分辨率设备所需的png资源,放在对应density的的res\drawable_xxx 路径下。
2. 制作xml矢量图。google未提供制作工具,目前市面上有收费软件Adobe Illustrator (AI)CS6可以制作,如果有兴趣可以向
mtk提交e-service申请该工具参考文档。标题注明SystemUI 关键字。
七:关于状态栏的电量百分比
关于状态栏中的电量百分比,包括显示或者隐藏电量百分比
一,KK之前:
通知栏电量百分比是CMCC定制的,只有TDD的项目才会有,如果要去掉,可以修改
mediate/operator/op01/packages/apps/plugins/res/vaules/default.xml
def_battery_percentage_op01 修改为false
二,KK后:
目前KK,L上默认不显示百分比!在QS那里显示
三,L和M版本上添加显示电量百分比办法:
1, 添加view
修改路径:frameworks/base/packages/SystemUI/res/layout/Status_bar.xml
<com.android.keyguard.AlphaOptimizedLinearLayout android:id="@+id/system_icon_area" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="horizontal" > .... <include layout="@layout/system_icons" /> <!-- add code--> <TextView android:id="@+id/battery_level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="@dimen/header_battery_margin_keyguard" android:paddingEnd="@dimen/battery_level_padding_end" android:textColor="#ffffff" android:textSize="@dimen/battery_level_text_size" android:importantForAccessibility="noHideDescendants"/> <!-- add code end--> <com.android.systemui.statusbar.policy.Clock android:id="@+id/clock" android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:layout_width="wrap_content" android:layout_height="match_parent" android:singleLine="true" android:paddingStart="7dp" android:gravity="center_vertical|start" /> </com.android.keyguard.AlphaOptimizedLinearLayout> </LinearLayout>2,修改PhoneStatusBar.java 代码:
添加代码路径:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
.................... import java.text.NumberFormat;//add code 导入包 ..................... PhoneStatusBar.java BatteryController mBatteryController; private TextView mBatteryLevel;//add code makeStatusBarView()方法: ....................... ................... mBatteryController = new BatteryController(mContext); mBatteryLevel = (TextView) mStatusBarView.findViewById(R.id.battery_level);//add code mBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() { @Override public void onPowerSaveChanged() { mHandler.post(mCheckBarModes); if (mDozeServiceHost != null) { mDozeServiceHost.firePowerSaveChanged(mBatteryController.isPowerSave()); } } @Override public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) { // noop //mtk add code String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);//add code mBatteryLevel.setText(percentage);//add code } });
持续更新中...
相关文章推荐
- 邮件系统选择上,安全性上需要注意的一些要点
- NOTE:Android Styles and Themes的一些需要注意的小细节
- Android替换字体时需要注意的一些问题
- Android系统蓝牙需要留意的20个必看知识点
- Android .mk文件中需要注意的一些宏
- Android 系统中 socket 编程需要注意的
- 一些细节,需要注意;一些小错,难以察觉(Android SharedPreferences、Thread、Toast、AsyncTask)
- Android:Service的注意点以及一些知识点
- Cocos2d-x 3.0 Android修改APK名、更改图标、修改屏幕方向、修改版本号,一些需要注意的问题
- JavaWeb前后台开发需要掌握和注意的一些知识点?
- Android中文出现乱码时需要注意的一些地方
- javascript中的一些核心知识点以及需要注意的地方
- Android开发的一些需要注意的细节
- Android应用开发中,需要注意的一些事项
- 电路系统设计制作过程和需要注意的一些问题
- Android系统的一些需要改进的地方
- javascript中的一些核心知识点以及需要注意的地方
- javascript中的一些核心知识点以及需要注意的地方
- javascript中的一些核心知识点以及需要注意的地方
- Android 调用系统拍照的一些应该注意的问题