【友盟+】开发者社区

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

老辛 发表于 2017-5-12 19:54:28 |

老辛
老辛 发表于 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系统版本,
看看复现一下问题




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;
        }
您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

新浪开放平台应用注册方法
新浪开放平台地址:http://open.weibo.com/ 1. 创建应用 注意选择微连接-移动应用 2. 填写应用信息 An
腾讯开放平台应用申请方法
腾讯开放平台地址:http://open.qq.com/ 1. 创建应用 创建应用时注意勾选对应的Android或iOS平台 2.
微信开放平台应用申请方法
微信开放平台地址:https://open.weixin.qq.com/ 1. 注册应用 注意这里必须选择移动应用注册 2. 填写

关注我们

新浪微博
微信

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

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