您的位置:首页 > 产品设计 > UI/UE

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)

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
}
});


持续更新中...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android SystemUi