[bug修复方案分享]Android4.0以上弹出Notification时图标显示不正常

1. 现象

在Android4.0以上系统中,弹出通知栏消息时图标显示不全,如下图:

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

Normal
0

10 pt
0
2

false
false
false

EN-US
ZH-CN
X-NONE

$([{£¥·‘“〈《「『【〔〖〝﹙﹛﹝$(.[{£¥
!%),.:;>?]}¢¨°·ˇˉ―‖’”…‰′″?℃∶、。〃〉》」』】〕〗〞︶︺︾﹀﹄﹚﹜﹞!"%'),.:;?]`|}~¢

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:Cambria;}

2. 问题来源:

Android 4.0以上版本顶部导航栏StatusBar的实现类PhoneStatusBar的bug:

在com.android.systemui.SystemUIService的onCreate()中:

在此处选择实例化statusbar(手机通知栏)还是systembar(平板通知栏):

在PhoneStatusBar.start() => StatusBar.start()时调用自身的虚函数addIcon()(即调用PhoneStatusBar的addIcon()函数)中实例化顶部导航栏Icon的view(PhoneStatusBarView)的时候,利用常数设置了缩放比例,并没有根据图片的实际大小缩放。

3. 解决方案

(1)初步:反射

public Notification(Context context, int icon, CharSequence tickerText, long when, CharSequence contentTitle, CharSequence contentText, Intent contentIntent) {}中的icon既是通知栏中提示的小icon,又是通知栏下拉菜单中的大icon,通知栏提示小icon无法修改,但是通知栏下拉菜单的大icon可以在组建RemoteViews时进行修改:

先在创建Notification时设置icon为小icon,在创建RemoteViews之后反射com.android.internal.R$id的icon值,从而调用Notification的contentView.setImageViewResource(id_icon, R.drawable.icon)重置大icon。

(2)进阶:android-support-v4.jar中的NotificationCompat.Builder

NotificationCompat.Builder支持设置smallicon(通知栏提示的小icon)和largeIcon(通知栏下拉菜单中的大icon)。NotificationCompat.Builder根据SDK版本的调用不同的实现类进行兼容。

时间: 09-28

[bug修复方案分享]Android4.0以上弹出Notification时图标显示不正常的相关文章

[bug修复方案分享]阿拉伯文导致TextView显示顺序左右颠倒

bug现象: 在“?(·ω·) ?”这个表情后通过StringBuilder拼接的文字会显示在表情内部,例如拼接“2015”后TextView控件中显示为“?(·ω·) ?2015” bug原因排查: Step1:怀疑是工程师调用append方法错误,但通过debug调试查看String的char[]值正常 Step2:怀疑是“ ?”这个特殊字符引起的问题,删除后显示正常 Step3:百度搜索“ ?”字符,发现是阿拉伯语文字,结合阿拉伯语从右至左的阅读.书写顺序,确认bug原因 bug修复方法:

[bug修复方案分享]ImageSpan居中问题

1.背景及原因分析: 之前我们自定义的ImageSpan,居中的算法是这样: 这个计算方法使用bottom这一参数为基准,进行居中计算.如果一个textview设置了行距,在android5及以上的操作系统,textview在单行和多行是这个bottom值是不一样的(单行文本无行距).导致居中的显示有误. 2.解决办法: 须要找到一个合理的基准,我以y这个参数为基准.从源码上观察,y即字体排印学中的基线(wiki地址,可能被墙). 则新的计算方法为:

解决IOS safari在input focus弹出输入法时不支持position fixed的问题

该文章为转载 我们在做移动web应用的时候,常常习惯于使用position:fixed把一个input框作为提问或者搜索框固定在页面底部.但在IOS的safari和webview中,对position:fixed的支持不是很好(在IOS5之前甚至还不支持position:fixed).我遇到的其中一个问题就是,在iOS6+环境下,input focus弹出输入法的时候,设置了position fixed的input框浮在页面上了,而不是吸附在软键盘上.效果如图(图片来源于网上): 而Androi

弹出键盘时,让table向上移动

弹出键盘时,让table向上移动 #pragma mark UITextFieldDelegate - (BOOL)textFieldShouldBeginEditing: (UITextField *)textField { [UIView beginAnimations: nil context: nil]; self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 280, 0); NSIndexPath *indexPath = [NSIn

JQuery 弹出层,始终显示在屏幕正中间

1.让层始终显示在屏幕正中间: 样式代码: Html代码   .model{ position: absolute; z-index: 1003; width:320px; height:320px; text-align:center; background-color:#0066FF; display: none; } jQuery代码: Js代码   //让指定的DIV始终显示在屏幕正中间 function letDivCenter(divName){ var top = ($(windo

弹出框关闭图标在火狐和谷歌下生效,在IE11下不生效处理

1.问题描述: 如下图弹出框,卸载码为第一个弹出框,检索设备为第二个弹出框,第二个弹出框的关闭图标"X"在火狐和谷歌下生效,点击可以关闭弹出框,而在IE11下点击不生效,无法关闭弹出框. 2.解决思路: 不兼容IE,在IE下console下会报错,所以考虑给关闭图标加上一个"点击事件". 二种处理方式: 一.首先,获取该iframe层的times值(times值是变化的,初次是2,页面没重新加载的再点击就依次加1) var index=$(window.parent

popupWindow 弹出窗口时的动画

首先,在values/anim中定义补间动画 popshow_anim.xml 由下往上淡入 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="1000" android:fromY

EXTJS弹出框关闭 隐藏 显示都没问题

function diaglogs(){   Ext.onReady(function(){     var _window=new Ext.Window({     title:"选择批语",     renderTo:Ext.getBody(),     frame:true,     plain:true,     resizable:false,     buttonAlign:"right",     closeAction:"hide"

如何让EasyUI弹出层跳出框架

这个的解决方法其实挺简单的. 只要在最外面的框架页面加个div,然后用parent.div的id就可以的.但是必须得弹出框得是一个页面. <div id="div_info"></div> //外层弹出框1 function openFirstWin(url, title, width, height) { var strWidth; var strHeight; if (width == null) strWidth = 800; else strWidth

jQuery点击弹出层,弹出模态框,点击模态框消失

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 <!DOCTYPE html>