Android使用Notification实现普通通知栏(一)
notification是在你的应用常规界面之外展示的消息。当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏。要查看消息的详情需要进入通知抽屉(notificationdrawer)中查看。(notificationdrawer)都是系统层面控制的,你可以随时查看,不限制于app。
notification的设计:
作为android ui中很重要的组成部分,notification拥有专属于自己的设计准则。
notification的界面元素在通知抽屉中的notification有两种显示方式,取决于你的android版本以及notificationdrawer的状态。
notification的两种显示方式:
(1)普通视图
这种风格是notification drawer的标准显示方式。
(2)宽视图
指你的notification被展开的时候会显示更大的视图,这种风格是android4.1之后才有的新特性。
下面我们详细介绍普通视图的实现:
在图通视图中,notification最高64dp,即使你创建了一个宽视图风格的notification,在未展开的情况下也是以普通大小显示出来。下面是一个普通的notification。
蓝色指示框所代表的的意思如下:
1.标题
2.大图标
3.通知内容
4.通知数据
5.小图标
6.notification的发布时间。
可以通过调用setwhen()设置一个明确的时间,
默认是系统收到该notification的时间。
下面我们是我们本次的演示效果:
本次在普通视图的基础上添加了点击页面跳转的效果,可以理解为添加notification的动作与行为:
虽然这也是可选的,但是你还是应该为你的notification至少添加一种行为:允许用户通过点击notification进入一个activity中进行更多的查看或者后续操作。一个notification可以提供多种动作,而且你也应该让用户点击一个notification之后能总是有相应的响应动作,通常是打开一个activity。你还可以在notification中添加能响应点击事件的button,比如延迟一下闹钟,或者立即回复一条短消息。
在notification内部,一个动作本身是被定义在一个pendingintent中,pendingintent包含了一个用于启动你app中activity的intent。要将pendingintent和一个手势联系起来,你需要调用合适的notificationcompat.builder方法。
比如你想在点击notification文字的时候启动activity,你需要调用notificationcompat.builder的setcontentintent()来添加pendingintent。启动一个activity是notification动作响应中最普遍的一类。
第一步:layout中的activity_main.xml(仅设置触发按钮):
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.day12.mainactivity"> <button android:text="显示通知" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button" android:onclick="show1" /> </linearlayout>
第二步:layout中的跳转页面activity_content.xml(仅设置显示文本):
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_content" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.day12.contentactivity"> <textview android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textsize="30sp" android:text="十胜十败" /> </linearlayout>
第三步:java(主界面按钮的点击事件)实现代码mainactivity.java:
import android.app.notification; import android.app.notificationmanager; import android.app.pendingintent; import android.content.context; import android.content.intent; import android.graphics.bitmapfactory; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.support.v7.app.notificationcompat; import android.view.view; import android.widget.remoteviews; public class mainactivity extends appcompatactivity { private static final int no_1 =0x1 ; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } public void show1(view v){ notificationcompat.builder builder = new notificationcompat.builder(this); builder.setsmallicon(r.mipmap.guojia); builder.setcontenttitle("郭嘉"); builder.setcontenttext("我们打袁绍吧"); //设置notification.default_all(默认启用全部服务(呼吸灯,铃声等) builder.setdefaults(notification.default_all); //调用notificationcompat.builder的setcontentintent()来添加pendingintent intent intent = new intent(this, contentactivity.class); intent.putextra("info", "郭嘉给你发了一个计策!"); pendingintent pi = pendingintent.getactivity(this, 0, intent, pendingintent.flag_update_current); builder.setcontentintent(pi); //获取notification notification n = builder.build(); //通过notificationcompat.builder.build()来获得notification对象自己 notificationmanager manager = (notificationmanager) getsystemservice(context.notification_service); //然后调用notificationmanager.notify()向系统转交 manager.notify(no_1, n); } }
第四步:java(跳转后activity)功能代码实现contentactivity.java(只土司):
public class contentactivity extends appcompatactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_content); //通过获取mainactivity中设置的putextra获取土司内容 toast.maketext(this, getintent().getstringextra("info"), toast.length_short).show(); } }
演示效果的代码就这些,我们梳理下本次实现的思路:
(1)通过按钮触发点击事件
(2)将notification的一些ui信息以及相关动作赋予notificationcompat.builder对象,然后通过notificationcompat.builder.build()来获得notification对象自己;然后调用notificationmanager.notify()向系统转交这个通知。
(3)在第二步中通过builder的setcontentintent()来添加pendingintent,为notification添加行为,也就是activity的跳转
(4)对打开的activity设置表现的效果。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: easyui datagrid合并单元格和改变某行颜色
下一篇: Server报错:java.lang.IllegalStateException: Cannot create a session after the response has been commit
推荐阅读
-
Android使用Notification实现普通通知栏(一)
-
Android使用Notification实现宽视图通知栏(二)
-
详解Android中使用Notification实现进度通知栏(示例三)
-
Android种使用Notification实现通知管理以及自定义通知栏实例(示例四)
-
Android使用Notification实现普通通知栏(一)
-
详解Android中使用Notification实现进度通知栏(示例三)
-
Android使用Notification实现宽视图通知栏(二)
-
Android种使用Notification实现通知管理以及自定义通知栏实例(示例四)
-
Android 使用AlarmManager和NotificationManager来实现闹钟和通知栏
-
Android 使用AlarmManager和NotificationManager来实现闹钟和通知栏