Android实现系统下拉栏的消息提示——Notification
16lz
2022-05-17
Android实现系统下拉栏的消息提示——Notification
系统默认样式
默认通知(通用)
效果图
按钮
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="notificationDefault" android:text="默认通知(通用)" />
实现
/** * 系统下拉栏默认的通用通知 */public void notificationDefault(View view) { // 获取NotificationManager管理者对象 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条出发的Activity,所以采用的是PendingIntent,即点击Notification跳转启动到哪个Activity PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); // 获取Notification对象 Notification notificationDefault = new Notification(); // 设置显示的图标 notificationDefault.icon = R.mipmap.ic_launcher; // 设置Title信息 notificationDefault.tickerText = "TickerText:您有新短消息,请注意查收!"; // 获取当前系统时间 notificationDefault.when = System.currentTimeMillis(); // 设置显示的信息 notificationDefault.setLatestEventInfo(this, "Title信息", "信息内容", pendingIntent); // 设置右下角显示的提示数字 notificationDefault.number = 1; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除 notificationDefault.flags |= Notification.FLAG_AUTO_CANCEL; // 通过通知管理器来发起通知。 manager.notify(NOTIFICATION_FLAG, notificationDefault);}
默认通知(API 11+)
效果图
按钮
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="notificationAPI_11p" android:text="默认通知(API 11+)" />
实现
/** * 系统下拉栏默认的通知(API 11+) */public void notificationAPI_11p(View view) { // 获取NotificationManager管理者对象 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条出发的Activity,所以采用的是PendingIntent,即点击Notification跳转启动到哪个Activity PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); // 通过Notification.Builder来创建通知,注意API Level 11之后才支持 Notification notificationAPI_11p = new Notification.Builder(this) // 设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap icon) .setSmallIcon(R.mipmap.ic_launcher) // 设置在status bar上显示的提示文字 .setTicker("TickerText:" + "您有新短消息,请注意查收!") // 设置在下拉status bar后显示的标题 .setContentTitle("这里是标题(API 11+)") // 设置在下拉status bar后显示的内容 .setContentText("这里是显示的内容") // 关联PendingIntent .setContentIntent(pendingIntent) // 设置在下拉status bar后显示的数字 .setNumber(1) // 需要注意build()是在API level 16及之后增加的,在API 11中可以使用getNotificatin()来代替 .getNotification(); // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除 notificationAPI_11p.flags |= Notification.FLAG_AUTO_CANCEL; // 通过通知管理器来发起通知。 manager.notify(NOTIFICATION_FLAG, notificationAPI_11p);}
默认通知(API 16+)
效果图
按钮
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="notificationAPI_16p" android:text="默认通知(API 16+)" />
实现
/** * 系统下拉栏默认的通知(API 16+) */public void notificationAPI_16p(View view) { // 获取NotificationManager管理者对象 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 创建一个PendingIntent,和Intent类似,不同的是由于不是马上调用,需要在下拉状态条出发的Activity,所以采用的是PendingIntent,即点击Notification跳转启动到哪个Activity PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); // 通过Notification.Builder来创建通知,注意API Level 16之后才支持 Notification notificationAPI_16p = new Notification.Builder(this) // 设置状态栏中的小图片,尺寸一般建议在24×24,这个图片同样也是在下拉状态栏中所显示,如果在那里需要更换更大的图片,可以使用setLargeIcon(Bitmap icon) .setSmallIcon(R.mipmap.ic_launcher) // 设置在status bar上显示的提示文字 .setTicker("TickerText:" + "您有新短消息,请注意查收!") // 设置在下拉status bar后显示的标题 .setContentTitle("这里是标题(API 16+)") // 设置在下拉status bar后显示的内容 .setContentText("这里是显示的内容") // 关联PendingIntent .setContentIntent(pendingIntent) // 设置在下拉status bar后显示的数字 .setNumber(1) // 需要注意build()是在API level 16及之后增加的,API11可以使用getNotificatin()来替代 .build(); // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。 notificationAPI_16p.flags |= Notification.FLAG_AUTO_CANCEL; // 通过通知管理器来发起通知 manager.notify(NOTIFICATION_FLAG, notificationAPI_16p);}
自定义样式
效果图
自定义提示框布局
在layout目录下添加my_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="wrap_content" android:background="#FF000000" android:orientation="vertical"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="match_parent" /> <TextView android:id="@+id/text_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/icon" android:gravity="center" android:textColor="#FFFFFFFF" android:textSize="20sp" /> <ProgressBar android:id="@+id/pb" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/text_content" android:layout_gravity="center_vertical" android:layout_toRightOf="@+id/icon" /></RelativeLayout>
按钮
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="myselfNotification" android:text="自定义通知" />
实现
/** * 系统下拉栏自定义的通知 */public void myselfNotification(View view) { // 获取NotificationManager管理者对象 mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // Notification myNotify = new Notification(R.drawable.message, // "自定义通知:您有新短信息了,请注意查收!", System.currentTimeMillis()); mNotification = new Notification(); // 显示的图片 mNotification.icon = R.mipmap.ic_launcher; // 设置在status bar上显示的提示文字 mNotification.tickerText = "TickerText:您有新短消息,请注意查收!"; // 获取当前系统时间 mNotification.when = System.currentTimeMillis(); // 表明当通知被用户点击时,通知不自动清除。 mNotification.flags = Notification.FLAG_NO_CLEAR; // 加载自定义的布局 mRemoteViews = new RemoteViews(getPackageName(), R.layout.my_notification); // 设置图片 mRemoteViews.setImageViewResource(R.id.icon, R.mipmap.ic_launcher); // 设置文字 mRemoteViews.setTextViewText(R.id.text_content, "下载进度"); // 设置进度 mRemoteViews.setProgressBar(R.id.pb, 100, 10, false); // 设置显示的自定义布局 mNotification.contentView = mRemoteViews; // 设置点击通知栏的响应动作 Intent intent = new Intent(Intent.ACTION_MAIN); // 设置通知的点击响应 PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 1); mNotification.contentIntent = contentIntent; // 通过通知管理器来发起通知 mNotificationManager.notify(NOTIFICATION_FLAG, mNotification);}
清除指定ID的通知
按钮
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="cleanNotificationById" android:text="清除指定ID的通知" />
实现
/** * 清除指定ID的提示 * @param view */public void cleanNotificationById(View view){ // 获取NotificationManager管理者对象 mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 清除id为NOTIFICATION_FLAG的通知 mNotificationManager.cancel(NOTIFICATION_FLAG);}
清除所有通知
按钮
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="cleanNotificationAll" android:text="清除所有通知" />
实现
/** * 清除所有的提示 * * @param view */public void cleanNotificationAll(View view) { // 获取NotificationManager管理者对象 mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 清除所有的通知 mNotificationManager.cancelAll();}
更多相关文章
- Android(安卓)UI开发第七篇之Android(安卓)Gallery
- Android控件Editext、TextView属性详解
- android强制横屏息屏后重新打开时会先显示竖屏
- android源代码编译
- android textview设置字体的行距和字间距
- Android(安卓)TextInputLayout 使用及其属性
- 朝花夕拾----新组件的学习和使用
- Android:实现一种浮动选择菜单的效果
- android TextView的字体颜色设置的多种方法(续)