Android无布局文件下自定义通知栏notification的 icon
在开发项目一个与通知栏有关的功能时,由于自己的项目是基于插件形式的所以无法引入系统可用的布局文件,这样无法自定义布局,造成无法自定义通知栏的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和布局大小与原有系统样式可能有一点偏差!
Android无布局文件下自定义通知栏notification的 icon的更多相关文章
- Android 读取assets文件下的txt文件
android 读取assets文件下的txt文件,解决了读取txt文件的乱码问题: package com.example.com.scrollview; import java.io.Buffer ...
- Android -- Layout布局文件里的android:layout_height等属性为什么会不起作用?
有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性来布局,比如我们设置了android:layout_marginTop="100dip ...
- Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的.下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口 ...
- Android Layout布局文件里的android:layout_height等属性不起作用
有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性 来布局,比为我们设置了android:layout_marginTop="100di ...
- Android为TV端助力 自定义通知栏
package com.example.mvp; import cn.ljuns.temperature.view.TemperatureView;import presenter.ILoginPre ...
- Android中将布局文件转成bitmap
在实践中发现,有些需要打印的小票高度小于屏幕的高度,而有些小票内容过多高度高于屏幕高度. 小于屏幕高度的布局文件转成bitmap较为容易,高于屏幕高度的布局文件转成长图bitmap较为复杂. 一.小于 ...
- android横屏布局文件设置
一.AndroidManifest.xml配置 1.在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入 android:screenOrient ...
- Xamarin.Android之布局文件智能提示问题
一.前言 看到有人问关于xamarin.android的布局没智能提示问题(VS 2015),当然,写布局这东西没提示这是一件相对痛苦的事 ,所以这里就提供一个解决的方案! 二.解决方案 想要智能提示 ...
- 如何把android中布局文件(.xml)与相关的类(.java)进行关联?
eg:把一个布局文件名为page1.xml与MainActivity.java(工程自动生成)进行 1.在存放使用资源的res文件夹下的layout文件夹内新建一个XML布局文件,如命名为:page1 ...
随机推荐
- error: openssl/md5.h: No such file or directory
出现:error: openssl/md5.h: No such file or directory 原因是openssl-devel没有安装,运行: yum install libssl-dev 就 ...
- Java 联系Oracle 数据库
一般完成 import oracle.jdbc.driver.*; 会后声明,你会发现一个错误.然后,你需要: 一.该JDBC开车到classpath 两种方法.一是图形化,计算机-属性-高级设置-环 ...
- 扩展你的javascript数组
如今做的项目用的正是jquery的框架,Jquery miniui,其功能强大.性能卓越.易于上手.不失灵活,在不断学习和研发的过程中,miniui给了非常多的启示,让我又一次认识了js的本质,意识到 ...
- c语言学习笔记(2)——预备知识
c语言预备知识 1.cpu 内存条 硬盘 显卡 主板显示器 之间的关系 硬盘里的<猛龙过江>(双击)--->内存条 cpu---->显卡,声卡--->显示器 2.he ...
- vb.net版本房收费系统改造
房费制开始重建的最终版本. 前几天.刚刚看完三层的视频,在视频中具体的解说了一个登录功能.天真的我,当时以为三层结构是那么的简单,所以我草草地做完总结之后,就非常快就開始机房收费系统的重构了.但是谁想 ...
- 在Linux下使用MinGW静态交叉编译带有zlib的libcurl(包括交叉编译openssl,即--cross-compile-prefix=i686-w64-mingw32- mingw)
在Linux下使用MinGW静态交叉编译带有zlib的libcurl libcurl是一个跨平台的.易用的.强大的网络库.在大部分Linux发行版中都有编译好的二进制包可供使用,Mac系统更是将其作为 ...
- Stream转Byte数组
//获得当前文件目录 string rootPath = Directory.GetCurrentDirectory(); string path = rootPath + "Your Fi ...
- EF ModelFirst 步骤
1 新建实体数据模型 ,选择空模型 2 建各个实体,并指定各字段属性,字符串需要指定长度 3 添加关系,选择关系类型,勾选添加外键 4 新建空的数据库,然后在edmx文件的空白处点右键,选择从模型生成 ...
- .Net Core 中使用PetaPoco ,T4生成模版
话不多说,直接上源码. 1.引用NuGet 2.添加T4 <#@ template debug="true" hostspecific="false" l ...
- linux虚拟机上svn客户端连接问题
在虚拟机上搭建好的svn,本地连接居然不行,原来是防火墙端口没开造成的. 修改配置文件:vi /etc/sysconfig/iptables # Generated by iptables-save ...