自定义状态栏notification布局

布局定义custom_notification.xml

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent" >  
      
    <ImageView   
        android:id="@+id/image"  
        android:layout_width="wrap_content"  
        android:layout_height="fill_parent"  
        android:layout_alignParentLeft="true"  
        android:layout_marginRight="10dp"  
        android:contentDescription="@string/Image" />  
      
    <TextView   
        android:id="@+id/title"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_toRightOf="@id/image"  
        style="@style/NotificationTitle" />  
      
    <TextView   
        android:id="@+id/text"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_toRightOf="@id/image"  
        android:layout_below="@id/title"  
        style="@style/NotificationText" />  
      
</RelativeLayout>

布居中引用的样式文件styles.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
<style name="NotificationText" parent="android:TextAppearance.StatusBar.EventContent" />  
<style name="NotificationTitle" parent="android:TextAppearance.StatusBar.EventContent.Title" />  
</resources>

代码

package cn.itcast.tabhost;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Color;
import android.widget.RemoteViews;

public  class FirstActivity extends Activity  {
    
    //默认点击返回键(back)会finish当前activity
    //activity栈中的所有activity都弹出后会退出当前应用
    @Override
    public void onBackPressed() {
        
        /*
         * 按照一般的逻辑,当Activity栈中有且只有一个Activity时,当按下Back键此
         * 那么下次点击此应用程序图标将从重新启动,当前不少应用程序都是采取如Home键的效果,
         * 当点击了Back键,系统返回到桌面,然后点击应用程序图标
         * 直接回到之前的Activity界面,这种效果是怎么实现的呢?通过重写按下Back键的回调函数,转成Home键的效果即可。
         */
        // 改为使用intent启动HOME桌面
        Intent home = new Intent(Intent.ACTION_MAIN);
        home.addCategory(Intent.CATEGORY_HOME);
        startActivity(home);

        // 或者,为达到此类效果,Activity实际上提供了直接的方法。
        // 将当前Activity所在的Task移到后台,同时保留activity顺序和状态。
        moveTaskToBack(true);// true表示不管是不是根都有效
    }
    
    
        /**
         * 当此Activity处于后台工作时, 在状态栏显示通知
         */
        @Override
        protected void onStop() {
            showNotification();
            super.onStop();
        }
    
    //当程序再次进入运行界面时,Activity处于onResume状态,在onResume方法中去掉状态栏的程序运行信息即可
    
        /**
         * 此Activity启动后关闭状态栏的通知
         */
        @Override
        protected void onResume() {
            // 启动后删除之前我们定义的通知
            NotificationManager notificationManager = (NotificationManager) this
                    .getSystemService(NOTIFICATION_SERVICE);
            notificationManager.cancel(CUSTOM_VIEW_ID);
            super.onResume();
        }
        
        private static final int CUSTOM_VIEW_ID = 1; 
      //在状态栏显示程序通知
        private void showNotification() {
            // 创建一个NotificationManager的引用
            NotificationManager notificationManager = (NotificationManager) this
                    .getSystemService(android.content.Context.NOTIFICATION_SERVICE);
    
            // 定义Notification的各种属性
            Notification notification = new Notification(R.drawable.bg_normal,
                    "superGao", System.currentTimeMillis());
            
            
            
            RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification); 
            contentView.setImageViewResource(R.id.image, R.drawable.i1);  
            contentView.setTextViewText(R.id.title, "自定义布局通知标题");  
            contentView.setTextViewText(R.id.text, "自定义布局通知内容"); 
            //给view设置点击事件
       /*     contentView.setOnClickPendingIntent(viewId, pendingIntent);
            */
            
            notification.contentView = contentView; 
            
            notification.flags |= Notification.FLAG_ONGOING_EVENT; // 将此通知放到通知栏的"Ongoing"即"正在运行"组中
            notification.flags |= Notification.FLAG_NO_CLEAR; // 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用
            notification.flags |= Notification.FLAG_SHOW_LIGHTS;//使用LED灯
            notification.defaults = Notification.DEFAULT_LIGHTS;
            notification.ledARGB = Color.BLUE;//LED灯颜色
            notification.ledOnMS = 5000;//led灯持续时间
    
            // 设置通知的事件消息
            /*
             * CharSequence contentTitle = "superGao"; // 通知栏标题
                CharSequence contentText = "love"; // 通知栏内容
            */
            Intent notificationIntent = new Intent(this, FirstActivity.class); // 点击该通知后要跳转的Activity
            PendingIntent contentItent = PendingIntent.getActivity(this, 0,
                    notificationIntent, 0);
            notification.contentIntent=contentItent;
            
           /* notification.setLatestEventInfo(this, contentTitle, contentText,
                    contentItent);*/
    
            // 把Notification传递给NotificationManager
            notificationManager.notify(CUSTOM_VIEW_ID , notification);
    
        }
    
}
时间: 2024-10-05 15:10:38

自定义状态栏notification布局的相关文章

android 实现自定义状态栏通知(Status Notification)

在android项目的开发中,有时为了实现和用户更好的交互,在通知栏这一小小的旮旯里,我们通常需要将内容丰富起来,这个时候我们就需要去实现自定义的通知栏,例如下面360或者网易的样式: 首先我们要了解的是 自定义布局文件支持的控件类型:Notification的自定义布局是RemoteViews,因此,它仅支持FrameLayout.LinearLayout.RelativeLayout三种布局控件,同时支持AnalogClock.Chronometer.Button.ImageButton.I

自定义的Notification

要创建一个自定义的Notification,可以使用RemoteViews.要定义自己的扩展消息,首先要初始化一个RemoteViews对象,然后将它传递给Notification contentView字段,再把PendingIntent传递给contentIntent字段.以下示例代码是完整步骤: //1.创建一个自定义的消息布局 view.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

【Android】自定义状态栏通知

在项目开发中,我们有时候需要自定义状态栏通知的样式,以下就是自定义状态栏通知的一个案例代码,以此作为一个记录,有需要的童鞋也可以参考一下 状态栏通知布局custom_notification.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" an

自定义状态栏通知

状态栏通知布局 custom_notification.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=&q

安卓自定义状态栏颜色以与APP风格保持一致

我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!若你手机上安装有最新版的qq,并且你的安卓SDK版本是4.4及以上,你可以看下它的效果: 实现此功能有两种方法: 1.在xml中设置主题或自定义style: Theme.Holo.Light.NoActionBar.TranslucentDecor Theme.Holo.NoActionBa

android 自定义状态栏和导航栏分析与实现

效果 android 4.4之后,系统是支持自定义状态栏和导航栏的,举个最典型的例子就是bilibili客户端了(iOS版本和android版本能用两套完全不一样符合各自系统的设计ui,良心啊-),顶部状态栏为粉色,底部导航栏为半透明色: 接着QQ最新的版本6.2也使用了状态栏透明风格,但是出来的效果在不同版本,不同手机上,显示的效果真是差异很大(4.3版本是无法使用状态栏透明风格的,只是放出来做个对比): ------------------------------------ -------

Android自定义Dialog及其布局

 实际项目开发中默认的Dialog无法满足需求,需要自定义Dialog及其布局,并响应布局中控件的事件. 上效果图: 自定义Dialog,LogoutDialog: 要将自定义布局传入构造函数中,才能在Activity中通过 dialog.findviewbyid 获取到控件,否则返回null. public class LogoutDialog extends Dialog{ Context context; public LogoutDialog(Context context) { sup

自定义layout中布局文件的属性

以前一直都是用ndroid自带的属性,突然发现自定义xml属性也是非常重要,于是总结了一下. 在values文件夹下新建的attr.xml文件,该文件为自定义属性. //attr.xml <?xml version="1.0" encoding="utf-8"?> <resources> <!-- MyView为自定义视图类 --> <!-- 注意:自定义属性必须一个不少的添加到布局文件中,否则编译失败 --> <

ios自定义状态栏显示发送结果

自定义状态栏,首先需要隐藏系统的statusbar然后重新显示一个window即可 直接上代码,可以直接使用: // //  CustomStatusBar.h //  CustomStatusBar // //  Created by yb on 14/10/24. //  Copyright (c) 2014年 yb. All rights reserved. // #import <UIKit/UIKit.h> @interface CustomStatusBar : UIWindow