在开发项目一个与告诉栏有关的功用时,因为自己的项目是根据插件方法的所以无法引进体系可用的布局文件,这样无法自定义布局,形成无法自定义告诉栏的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和布局巨细与原有体系款式可能有一点误差!