Notification详解
一、Notification的基本情形

元素:
1. 标题 Title/Name
2. 大图标 Icon/Photo
3. 内容文字
4. 内容信息 MESSAGE
5. 小图标 Secondary Icon
6. 通知的时间 Timestamp,默认为系统发出通知的时间,也可通过setWhen()来设置
二、app中的通知实现方式及特点
Banner :在不中断当前操作的情况下告知用户新消息,会对当前有干扰,但不打断,应用中要注意停留时间和用户错过后的找寻路径;
Alert :强打断型提醒,提醒内容与当前应用有联系时可以接受;
标记 :一种不紧急的提醒方式,增量很难记住,部分用户有强迫清零的习惯;
Toast :纯告知,不需要处理;针对正在操作的反馈;
预览 :可辅助用户判断是否需要查看该信息详情,但要注意结合“标记为已读”机制;
通知栏 :是一种被普遍接受的通知方式,优点是“集中处理”。

三、实现方式
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/notifi_bt1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Base消息框" /> <Button android:id="@+id/notifi_bt2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="更新消息框" /> <Button android:id="@+id/notifi_bt3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="清除消息框" /> <Button android:id="@+id/notifi_bt4" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Media消息框" /> <Button android:id="@+id/notifi_bt5" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="清除Media消息框" /> <Button android:id="@+id/notifi_bt6" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="清除所有消息框" /> <Button android:id="@+id/notifi_bt7" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="自定义消息框" /> <Button android:id="@+id/notifi_bt8" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="自定义提示框" /> </LinearLayout> self_define_notification.xml 【自定义notification布局文件】 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="10dp" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textColor="#000" /> </LinearLayout> self_define_dialog.xml 【自定义Dialog的实现】 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/self_define_body" android:background="#04000000" /> <LinearLayout android:id="@+id/self_define_body" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@color/white" android:orientation="vertical"> <!--分割线--> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@color/light_black" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RelativeLayout android:id="@+id/self_define_cancel" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/kill" /> </RelativeLayout> <Button android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="6" android:background="@color/white" android:text="提示" android:textColor="@color/text_black" android:textSize="22sp" /> <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" /> </LinearLayout> <!--分割线--> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@color/light_black" /> <TextView android:layout_width="match_parent" android:layout_height="100dp" android:gravity="center" android:text="自定义提示框提示内容" android:textSize="22sp" /> <!--分割线--> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@color/light_black" /> <Button android:id="@+id/self_define_ensure" android:layout_width="match_parent" android:layout_height="50dp" android:layout_weight="6" android:background="@color/white" android:text="确定" android:textColor="@color/blue" android:textSize="22sp" /> </LinearLayout> </RelativeLayout>MainActivity的实现 public class MainActivity extends AppCompatActivity implements View.OnClickListener { /** * Base消息框 */ private Button bt1; /** * 更新消息框 */ private Button bt2; /** * 取消常规消息框 */ private Button bt3; /** * Media消息框 */ private Button bt4; /** * 清除Media消息框 */ private Button bt5; /** * 清除所有消息框 */ private Button bt6; /** * 自定义消息框 */ private Button bt7; /** * 自定义提示框 */ private Button bt8; /** * Base消息框 */ private int Notification_ID_BASE = 110; private Notification baseNF; /** * Media消息框 */ private int Notification_ID_MEDIA = 119; private Notification mediaNF; /** * 通知管理器 */ private NotificationManager nm; /** * 通知显示内容 */ private PendingIntent pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Intent intent = new Intent(this, MainActivity.class); pd = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); initView(); initListener(); } /** * 初始化监听器 */ private void initListener() { bt1.setOnClickListener(this); bt2.setOnClickListener(this); bt3.setOnClickListener(this); bt4.setOnClickListener(this); bt5.setOnClickListener(this); bt6.setOnClickListener(this); bt7.setOnClickListener(this); bt8.setOnClickListener(this); } /** * 初始化View */ private void initView() { bt1 = (Button) findViewById(R.id.notifi_bt1); bt2 = (Button) findViewById(R.id.notifi_bt2); bt3 = (Button) findViewById(R.id.notifi_bt3); bt4 = (Button) findViewById(R.id.notifi_bt4); bt5 = (Button) findViewById(R.id.notifi_bt5); bt6 = (Button) findViewById(R.id.notifi_bt6); bt7 = (Button) findViewById(R.id.notifi_bt7); bt8 = (Button) findViewById(R.id.notifi_bt8); } @Override public void onClick(View v) { switch (v.getId()) { /** * base消息框 */ case R.id.notifi_bt1: //新建状态栏通知 baseNF = new Notification(); //设置通知在状态栏显示的图标 baseNF.icon = R.drawable.beautiful; //通知时在状态栏显示的内容 baseNF.tickerText = "你点击了Base消息框!"; //通知的默认参数 DEFAULT_SOUND, DEFAULT_VIBRATE, DEFAULT_LIGHTS. //如果要全部采用默认值, 用 DEFAULT_ALL. //此处采用默认声音 baseNF.defaults |= Notification.DEFAULT_SOUND; baseNF.defaults |= Notification.DEFAULT_VIBRATE; baseNF.defaults |= Notification.DEFAULT_LIGHTS; //让声音、振动无限循环,直到用户响应 baseNF.flags |= Notification.FLAG_INSISTENT; //通知被点击后,自动消失 baseNF.flags |= Notification.FLAG_AUTO_CANCEL; //点击'Clear'时,不清除该通知(QQ的通知无法清除,就是用的这个) baseNF.flags |= Notification.FLAG_NO_CLEAR; //第二个参数 :下拉状态栏时显示的消息标题 expanded message title //第三个参数:下拉状态栏时显示的消息内容 expanded message text //第四个参数:点击该通知时执行页面跳转 baseNF.setLatestEventInfo(MainActivity.this, "Base消息框", "Base消息框内容", pd); //发出状态栏通知 //Notification_ID_BASE 消息通知的特有ID //baseNF 消息对象 nm.notify(Notification_ID_BASE, baseNF); break; /** * 更新消息框 */ case R.id.notifi_bt2: //更新通知 //比如状态栏提示有一条新短信,还没来得及查看,又来一条新短信的提示。 //此时采用更新原来通知的方式比较。 //(再重新发一个通知也可以,但是这样会造成通知的混乱,而且显示多个通知给用户,对用户也不友好) if (baseNF != null) { baseNF.setLatestEventInfo(MainActivity.this, "更新消息框", "更新消息框内容", pd); nm.notify(Notification_ID_BASE, baseNF); } break; /** * 取消消息框 */ case R.id.notifi_bt3: //清除 baseNF,依据特有ID清除 nm.cancel(Notification_ID_BASE); break; /** * Media消息框 */ case R.id.notifi_bt4: mediaNF = new Notification(); mediaNF.icon = R.drawable.beautiful; mediaNF.tickerText = "帅哥,你点击了Media消息框!"; //自定义声音 mediaNF.sound = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "6"); //通知时发出的振动 //第一个参数: 振动前等待的时间 //第二个参数: 第一次振动的时长、以此类推【仓储PDA震动使用相似】 long[] vir = {0, 100, 200, 300}; mediaNF.vibrate = vir; mediaNF.setLatestEventInfo(MainActivity.this, "Media消息框", "Media消息框内容", pd); nm.notify(Notification_ID_MEDIA, mediaNF); break; /** * 取消Media消息框 */ case R.id.notifi_bt5: //清除 mediaNF nm.cancel(Notification_ID_MEDIA); break; /** * 清除所有消息框 */ case R.id.notifi_bt6: nm.cancelAll(); break; /** * 自定义消息框 */ case R.id.notifi_bt7: //自定义下拉展示视图,比如下载软件时,显示的进度条。 Notification notification = new Notification(); notification.icon = R.drawable.beautiful; notification.tickerText = "自定义消息框!"; RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.self_define_notification); contentView.setImageViewResource(R.id.image, R.drawable.beautiful); contentView.setTextViewText(R.id.text, "这是一个自定义消息框!"); notification.contentView = contentView; //使用自定义下拉视图时,不需要再调用setLatestEventInfo()方法 //但是必须定义 contentIntent notification.contentIntent = pd; nm.notify(3, notification); break; /** * 自定义提示框 */ case R.id.notifi_bt8: showEnsureDialog(); break; } } /** * 展示确认弹出框 */ private void showEnsureDialog() { final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); alertDialog.show();//show需要在渲染其内部内容之前展示 Window window = alertDialog.getWindow(); window.setContentView(R.layout.self_define_dialog); RelativeLayout selfDefineCancel = (RelativeLayout) window.findViewById(R.id.self_define_cancel); selfDefineCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); } }); Button selfDefineEnsure = (Button) window.findViewById(R.id.self_define_ensure); selfDefineEnsure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /** * 确认事件 */ } }); } }
我是你想要的源码(^o^)/~
展示效果:
越是不经意的表演,越是需要刻意地练习。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/android/9905.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
Android开发_深入学习ViewP
时间:2020-12-27
-
Android Binder进程间通信 J
时间:2020-12-27
-
50个Android开发技巧11 为文
时间:2020-12-27
-
处女男学Android(十二)
时间:2020-12-27
-
手把手教你用ViewPager自定
时间:2020-12-27
-
字母条索引定位
时间:2020-12-27
-
OGEngine教程:声音加载
时间:2020-12-27
-
Notification详解
时间:2020-12-27
热门文章
-
字母条索引定位
时间:2020-12-27
-
Notification详解
时间:2020-12-27
-
OGEngine教程:声音加载
时间:2020-12-27
-
处女男学Android(十二) Android菜单(Men
时间:2020-12-27
-
Android Binder进程间通信 Java接口源代码
时间:2020-12-27
-
50个Android开发技巧11 为文字添加特效
时间:2020-12-27
-
Android开发_深入学习ViewPager控件
时间:2020-12-27
-
手把手教你用ViewPager自定义实现Banner轮播
时间:2020-12-27
