【友盟+】开发者社区

自定义通知栏样式代码示例

老辛 发表于 2017-8-23 13:42:45 |

老辛
老辛 发表于 2015-7-10 13:35:34 | 显示全部楼层 |阅读模式
我们可以重写UmengMessageHandler类的getNotification方法来自定义通知栏的样式,以下代码是一个范例。

[Java] 纯文本查看 复制代码
@Override 
public Notification getNotification(Context context, UMessage msg) {     
switch (msg.builder_id) {     
case 1:         
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context);         
    RemoteViews myNotificationView = new RemoteViews(context.getPackageName(), R.layout.notification_view);         
    myNotificationView.setTextViewText(R.id.notification_title, msg.title);            
    myNotificationView.setTextViewText(R.id.notification_text, msg.text);            
    myNotificationView.setImageViewBitmap(R.id.notification_large_icon, getLargeIcon(context, msg));      
    myNotificationView.setImageViewResource(R.id.notification_small_icon, getSmallIconId(context, msg));         
    builder.setContent(myNotificationView);         
    Notification mNotification = builder.build();         
    //由于Android v4包的bug,在2.3及以下系统,Builder创建出来的Notification,并没有设置RemoteView,故需要添加此代码         
    mNotification.contentView = myNotificationView;         
    return mNotification;     
default:         
    //默认为0,若填写的builder_id并不存在,也使用默认。         
    return super.getNotification(context, msg);    
}
}


下面的xml代码表示的是自定义通知的样式,左边是一个大图标,右边是一个小图标,中间是三行文本,
分别显示了通知的标题、内容和自定义信息。

[AppleScript] 纯文本查看 复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="64dp" >

    <ImageView
        android:id="@+id/notification_large_icon"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:scaleType="fitXY"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/notification_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:layout_toRightOf="@+id/notification_large_icon"
        android:text="Title" />

    <TextView
        android:id="@+id/notification_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/notification_title"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/notification_large_icon"
        android:text="Message" />


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/notification_text"
        android:layout_marginLeft="10dp"
        android:textSize="10dp"
        android:layout_toRightOf="@+id/notification_large_icon"
        android:text="(嘿嘿,偷偷听告诉你,我是自定义的)" />
    
    <ImageView
        android:id="@+id/notification_small_icon"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:scaleType="fitXY"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="5dp"
        android:layout_marginBottom="5dp"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>


要使用自定义的通知栏样式,需要在新建通知时,设置与代码中对应的通知栏样式编号,在此范例中,通知栏样式编号是1,也就是builder_id的值为1。然后根据自定义的布局文件来建立RemoteViews,并且把建立的RemoteViews和通知的contentView做绑定,实现的通知栏样式类似如下图所示:

自定义通知

自定义通知





上一篇:我的部署的服务器无法访问外网,获取签名的时候访问不到
下一篇:android 获取不到device Token 怎么办


ytcgk
ytcgk 发表于 2015-8-5 15:44:50 | 显示全部楼层
请问UmengMessageHandler这个类是在哪里的?下载的sdk里面是class文件,找不到UmengMessageHandler类啊

老辛
老辛 发表于 2015-10-21 16:33:36 | 显示全部楼层
ytcgk 发表于 2015-8-5 15:44
请问UmengMessageHandler这个类是在哪里的?下载的sdk里面是class文件,找不到UmengMessageHandler类啊 ...

UmengMessageHandler这个类就在sdk的com.umeng.message包中的


老辛
老辛 发表于 2015-10-21 17:10:42 | 显示全部楼层
li112 发表于 2015-10-21 16:54
不适配LG手机怎么办,图片不显示全,换了一个大图标也不管用

通知图标的显示可能跟手机有关,发一下你的问题图片,手机型号和android系统版本,
看看复现一下问题



hahaha
hahaha 发表于 2015-11-4 11:05:10 | 显示全部楼层
你好,我想问一下,getNotification返回的Notification实例,是不是只用设置好标题、内容和图片就可以了。其它的类似后续动作、提醒方式的处理,SDK都会帮我们处理好?

DevinScarlet
DevinScarlet 发表于 2016-4-22 19:37:43 | 显示全部楼层
请问UmengMessageHandler这个类是在哪里的?下载的sdk里面是class文件,找不到UmengMessageHandler类啊 ...

DevinScarlet
DevinScarlet 发表于 2016-4-22 19:39:27 | 显示全部楼层
请问UmengMessageHandler这个类是在哪里的?下载的sdk里面是class文件,找不到UmengMessageHandler类啊 ...我集成的是2.8版本的SDK,src里面没有代码,UmengMessageHandler在jar包里面,是class文件,请问我应该怎么处理



大隐
大隐 发表于 2017-5-12 19:54:28 | 显示全部楼层
按照你的做法,由于需要展示高度超过默认高度的通知,我设置了如下配置,为什么还是现实默认高度,多余的内容被挡住
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            mNotification.bigContentView = myNotificationView;
        }

DiDa_push
DiDa_push 发表于 2017-8-23 13:42:45 | 显示全部楼层
请教:代码如图所示,且Log显示收到了builder_id = 1的消息,但通知栏没有显示任何消息。
自定义通知栏.png
您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

最新版推送SDK收不到消息
设备已经连接上,工具检查在线状态是在线的。但是添加测试设备显示的 无法检测有效性,推送消息也收不到
消息推送问题,华为和部分离线收不到推送消息
已经集成了友盟提供的聚合推送并且按照文档配置了小米通道和华为通道,但是进程杀死的情况下没有收到推送
上海快3计划裙1111-276-上海快3计划专业方案裙1111-276 友盟推荐
惊喜!上海快3计划裙1111-276上海快3计划专业方案裙1111-276 友盟推荐 年前,老家人人传说处处谣言,开口闭

关注我们

新浪微博
微信

欢迎关注友盟官方微博微信!

在线客服
返回顶部 返回列表