网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

Android无布局文件下自定义通知栏notification的 icon

在网上也有一种不用布局文件更换icon的方法,但是由于Android的开放性,某些手机厂商会修改通知的源码,不是使用系统原有的布局文件方法有一定的局限性。文章如下http://blog.csdn.net/z1074971432/article/details/10446715有兴趣的朋友可以看下。

为了适配大多数的机型这里衍生出一种比较曲线救国的方式。。。

public void show(String title, CharSequence content, Bitmap bitmap, PendingIntent intent)

{

// 在2.3的机子上,如果id相同的notifation,有一个带ContentIntent一个不带就会抛异常

_notification.setLatestEventInfo(_context, , , null);

_notification.flags = _flag;

RemoteViews hide = _notification.contentView;

initView(_notification,hide, title, content, intent,bitmap);

_manager.notify(_id, _notification);

}

public void cancel()

{

_manager.cancel(_id);

}

@SuppressWarnings(deprecation)

void initView(final Notification bar, final RemoteViews views, String title, CharSequence text, PendingIntent intent, final Bitmap bitmap)

{

bar.contentView = null;

bar.setLatestEventInfo(_context, title, text, intent);

Notification notification = new Notification();

notification.setLatestEventInfo(_context, , , null);

View view = notification.contentView.apply(_context, null);//以notification实例化一个View,这个就是系统当前使用的布局视图

ViewGroup group = (ViewGroup) view;

findView(group, new ViewVisitor()

{

@Override

public void onFindView(View item)

{

if (item instanceof ImageView)//查找这个布局下的ImageView就是icon控件

{

bar.contentView.setInt(item.getId(), setAlpha, 0);//将原有的icon隐藏,由于在小米系统中系统设置的icon会覆盖原有设置的

views.setViewPadding(item.getId(), item.getPaddingLeft(), item.getPaddingTop(), item.getPaddingRight(), item.getPaddingBottom());

if (bitmap != null)

views.setImageViewBitmap(item.getId(), bitmap);//设置icon图片

else views.setImageViewResource(item.getId(), _context.getApplicationInfo().icon);

}

else if(item instanceof TextView)

{

views.setViewVisibility(item.getId(), View.GONE);//隐藏最上层的view里的所有的TextView,不与底层的重叠

}

}

});

views.setInt(view.getId(), setBackgroundColor, Color.argb(0, 0, 0, 0));设置上层布局的背景透明

views.setViewPadding(view.getId(), 0, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom());

bar.contentView.addView(view.getId(), views);//将views添加到原有的布局视图上

}

public interface ViewVisitor

{

void onFindView(View view);

}

void findView(ViewGroup group, ViewVisitor visitor)//查找视图里面的所有子视图

{

for (int i = 0; i group.getChildCount(); i++)

{

View view = group.getChildAt(i);

if (visitor != null)

visitor.onFindView(view);

if (view instanceof ViewGroup)

findView((ViewGroup) view, visitor);

}

}

由于无法对自定义的布局进行准确定位,所以这种方式的icon和布局大小与原有系统样式可能有一点偏差!

热门搜索:48VDCSPLITTER LC1200 2839237 SS3612 PM6SN1 SUPER6OMNI B 2866352 PDUMH15 TLM825SA PS3612 BT151S-800R118 UL17CB-15 PSF3612 SBB1602-1 6SPDX-15 SS7415-15 PDU2430 BT152-500R/600R UL24RA-15 PS361206 LC2400 01B5001JF PS240810 TLP1210SATG ADC128S102CIMTX
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质