Android使用Notification实现普通通知栏(一)

 更新时间:2016年12月07日 09:38:23   作者:潘侯爷  
这篇文章主要为大家详细介绍了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设置表现的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Kotlin中内置函数的用法和区别总结

    Kotlin中内置函数的用法和区别总结

    众所周知相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。下面这篇文章主要给大家介绍了关于Kotlin中内置函数的用法和区别的相关资料,需要的朋友可以参考下
    2018-06-06
  • Android RecycleView和线型布局制作聊天布局

    Android RecycleView和线型布局制作聊天布局

    大家好,本篇文章主要讲的是Android RecycleView和线型布局制作聊天布局,感兴趣的同学赶紧来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Android的UI调优教程

    Android的UI调优教程

    这篇文章主要为介绍了Android的UI调优各种案例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • Android seekbar(自定义)控制音量同步更新

    Android seekbar(自定义)控制音量同步更新

    这篇文章主要介绍了Android seekbar(自定义)控制音量同步更新的相关资料,需要的朋友可以参考下
    2017-01-01
  • 如何给Flutter界面切换实现点特效

    如何给Flutter界面切换实现点特效

    这篇文章主要给大家介绍了关于如何给Flutter界面切换实现点特效的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 基于Android中手势交互的实现方法

    基于Android中手势交互的实现方法

    本篇文章是对Android中手势交互的实现进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • android获得当前view在屏幕中坐标的方法

    android获得当前view在屏幕中坐标的方法

    这篇文章主要介绍了android获得当前view在屏幕中坐标的方法,涉及Android针对view坐标相关属性的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • 详解Android的MVVM框架 - 数据绑定

    详解Android的MVVM框架 - 数据绑定

    这篇文章主要介绍了详解Android的MVVM框架 - 数据绑定,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Android ListView仿微信聊天界面

    Android ListView仿微信聊天界面

    这篇文章主要为大家详细介绍了ListView仿微信聊天界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Android开发使用Handler实现图片轮播功能示例

    Android开发使用Handler实现图片轮播功能示例

    这篇文章主要介绍了Android开发使用Handler实现图片轮播功能,涉及Android基于Handler操作图片的相关实现技巧与操作注意事项,需要的朋友可以参考下
    2017-09-09

最新评论