Android系统:SystemUi需要注意的一些知识点


一: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的日期设置中选择一个日期格式,如下图:

Android系统:SystemUi需要注意的一些知识点_第1张图片

但是发现通知栏列表中的日期格式显示和选择的不一致,如下图:

Android系统:SystemUi需要注意的一些知识点_第2张图片

这个是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


    ....
    
    
    
       
    
    
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)