通知(Toast+Notification)
Toast简要说明:(前面已经用过好多次了)
- Toast是一种非持久的(在屏幕上面留一会儿就消失了),提供给用户简洁提示信息的视图。
- 它不阻断用户的操作,一般用于显示一些不重要的信息。(比方说设置音量的那个提示)
- Toast类可以用于创建和显示toast信息,toast一般翻译为吐司。
常用方法:(有set方法,也有get方法)
- Toast.makeText(context, text, duration); //返回Toast对象
- toast.setDuration(duration); //设置持续时间
- toast.setGravity(gravity, xOffset, yOffset); //设置toast位置,后面的位置偏移参照物是gravity(center/center_horizontal/center_vertical/Bottomd等)
- toast.setText(s); //设置提示内容
- toast.show(); //显示
代码演示一下:
1. 改变位置
后面两个是偏移量,是根据前面一个gravity参数来指定的。
2. toast显示图片
MainActivity.java
public class MainActivity extends Activity implements OnClickListener
{
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
Toast toast = Toast.makeText(this, "带有图片的toast", Toast.LENGTH_LONG);
LinearLayout toast_layout = (LinearLayout) toast.getView();
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.ic_launcher);
toast_layout.addView(iv); //再当前布局中加入一个iamgeview
//toast_layout.addView(iv,0);则是指定线性布局中的索引
toast.show();
}
}
(布局文件就只有一个Button控件)
点击按钮,则出现下列情况。

3. 完全自定义的toast
先要去定义一个布局文件toastlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<TextView
android:layout_width="match_parent"
android:layout_height="30dp"
android:gravity="center"
android:text="这个是自定义布局的toast"/>
</LinearLayout>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.toastytest.MainActivity" >
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="显示toast"
/>
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity implements OnClickListener
{
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
//为控件指定布局
LayoutInflater inflater = LayoutInflater.from(this);
View toast_view = inflater.inflate(R.layout.toastlayout, null);
Toast toast = new Toast(this);
toast.setView(toast_view);
toast.show();
}
}
点击效果如下:

(toast的用法,一般就是简单的提示作用)
Notification简要说明:
- 在设备的状态栏(通知栏)中显示
- 显示一条持久化信息
- 用到Notification和NotificationManager类
在这里,必须要分清3种情况:
- 其他应用程序在使用时,突然在通知栏中显示一条Notification
- 下拉状态栏,Notification显示一些详细信息
- 点击Notification,有相应的应用程序或者activity被激活
下面用代码演示一下:
新建一个活动NotificationView.java (一会儿点击“下拉状态栏”里面的notification时,就跳转这个activity)
public class NotificationView extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.notification);
//点击notification后,在状态栏取消notification
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
nm.cancel(getIntent().getExtras().getInt("notificationID"));
}
}
其指定布局为 notification.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="这里是notification的详细信息" />
</LinearLayout>
当然还要注册activity—AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.notificationdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NotificationView"
android:label="Details of notification"
>
<intent-filter >
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
public class MainActivity extends Activity implements OnClickListener
{
private int notificationID = 1; //用于被激活的activity去销毁notification
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
displayNotification();
}
private void displayNotification()
{
Intent i = new Intent(this,NotificationView.class);
i.putExtra("notificationID", notificationID);
//PendingIntent 可以让应用程序在后面某个时刻执行一个动作,而不考虑应用程序是否在运行
//PendingIntent android.app.PendingIntent.getActivity(Context context,
// int requestCode, Intent intent, int flags) flags是活动启动时的标志
//点击了下拉的notification时,启动一个指定活动
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,0);
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//没有下拉时显示的notification
Notification notif = new Notification(
R.drawable.ic_launcher,
"还有没下拉时的信息",
System.currentTimeMillis());//发送时间
//下拉时,显示Notification的信息
notif.setLatestEventInfo(this, "下拉时", "详细信息是", pendingIntent);
notif.vibrate = new long[]{100,250,100,500}; //发出震动
nm.notify(notificationID,notif);
}
}
主布局里面就一个button
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显示一条通知" />
</RelativeLayout>
赶快来看看效果:

点击按钮、

下拉状态栏:

点击该下拉状态栏中的notification
(立刻就跳转到了新的activity)

小结:
- 突然显示了一条notification提示:Notification notif = new Notification( R.drawable.ic_launcher, "还有没下拉时的信息", System.currentTimeMillis());
- 下拉显示,需要用到NotificationManager:
- 点击下拉的状态栏里面的notification时,跳转:
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//下拉时,显示Notification的信息
notif.setLatestEventInfo(this, "下拉时", "详细信息是", pendingIntent);
notif.vibrate = new long[]{100,250,100,500}; //发出震动
nm.notify(notificationID,notif);
Intent i = new Intent(this,NotificationView.class);
i.putExtra("notificationID", notificationID);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,0);
补充:PendingIntent 可以让应用程序在后面某个时刻执行一个动作,而不考虑应用程序是否在运行
实际上显示和取消通知栏都是NotificationManager在起作用:
notify(id, notification);
cancel(id);
构造Notification的时候,如果有初始化,那么就是最开始没有下拉时显示的状况了。
通知栏可以设置,提示音,指示灯,以及震动效果.
上面的代码,构建Notification对象的方法其实已经过时了,现在用的比较多的是Builder对象
Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher); //设置图标
builder.setTicker("没有下拉时显示的一个消息");
builder.setWhen(System.currentTimeMills()); //设置时间
builder.setContentTitle("下拉时标题");
builder.setContentText("下拉时详细信息");
PendingIntent pIntent = PendingIntent.getActivity(this,0,new Intent("com.example.NotificationView"),0);
builder.setContentIntent(pIntent); //点击后跳转
builder.setDefaults(Notification.DEFAULT_LIGHTS); //设置指示灯
Notification notif = builder.build(); //4.1及以上版本
//builder.getNotification(); //4.1以下版本
其中:
builder.setDefaults();
可以传入:
Notification.DEFAULT_SOUND;
Notification.DEFAULT_LIGHTS;
Notification.DEFAULT_VIBRATE;
或者设置一条:(相当于以上三条)
Notification.DEFUALT_ALL;
通知(Toast+Notification)的更多相关文章
- 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo
[源码下载] 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo 作者:webabcd 介绍重新想象 Wind ...
- 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解
[源码下载] 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Toa ...
- Android消息通知(notification)和PendingIntent传值
通知栏的自定义布局:转:http://blog.csdn.net/vipzjyno1/article/details/25248021 拓展 实现自定义的通知栏效果: 这里要用到RemoteViews ...
- New Windows 10 SDK - Toast Notification
概述 Toast Notification 在 UWP App 中有很重要的作用,能够很大程度上增强 App 和用户之间的沟通,比如运营推广活动.版本更新.提醒类任务提示等等.Toast Notifi ...
- 【转】通知 Toast详细用法(显示view)
原文网址:http://www.pocketdigi.com/20100904/87.html 今天学习Android通知 Toast的用法,Toast在手机屏幕上向用户显示一条信息,一段时间后信息会 ...
- HTML5开启浏览器桌面通知 Web Notification
说明: 1.Chrome要求必须https才可以开启浏览器通知 2.显示图片在本服务器,不支持跨越 3.自定义声音Chrome不播放,Firefox正常播放 代码如下: <!-- /** * @ ...
- iOS 远程通知(Remote Notification)和本地通知(Local Notification)
ios通知分为远程通知和本地通知,远程通知需要连接网络,本地通知是不需要的,不管用户是打开应用还是关闭应用,我们的通知都会发出,并被客户端收到 我们使用远程通知主要是随时更新最新的数据给用户,使用本地 ...
- 介绍一个比较酷东西:HTML5 桌面通知(Notification API)
Notification API 是 HTML5 新增的桌面通知 API,用于向用户显示通知信息.该通知是脱离浏览器的,即使用户没有停留在当前标签页,甚至最小化了浏览器,该通知信息也一样会置顶显示出来 ...
- redis键空间通知(keyspace notification)
一.需求 在redis中,设置好key和生存时间之后,希望key过期被删除时能够及时的发送一个通知告诉我key,以便我做后续的一些操作. 二.环境 系统:windows10 php:7.1 redis ...
随机推荐
- SQL Server ->> 生成Numbers辅助表
if object_id('MyDB.dbo.Numbers') is not null drop table MyDB.dbo.Numbers go use [MyDB] go create tab ...
- 《mysql数据库备份小脚本》(转)
vim mysql.sh #!/bin/bashDAY=`date +%Y-%m-%d` //日期以年月日显示并赋予DAY变量SIZE=`du -sh /var/lib/mysql //查看mysql ...
- 怎样做出优秀的扁平化设计风格 PPT 或 Keynote 幻灯片演示文稿?(装)
不知道你有没有想过,为什么很人多的扁平化 PPT 是这个样子: 或者是这样: 然而,还有一小撮人的扁平化 PPT 却拥有那么高颜值: 为什么会产生这么大的差距呢?丑逼 PPT 应该如何逆袭成为帅逼呢? ...
- git使用(一)
github因为众所周知的一些问题,不方便选为远程仓库,在此,我们选用oschina的远程仓库,首先去http://git.oschina.net/申请一个账号. 第一步,安装git(下载电脑系统对应 ...
- javascript中 的 + RegExp['\x241'] 怎么理解
\x24是十六进制转义符,16*2+4=36,ASCII码36代表的正是“$”符号(可以查ASCII码表),十六进制转义符的一般形式是'\xhh',h是0-9或A-F内的一个.$1是javascrip ...
- java验证码-汉字验证码
今天整理了一个java实现的汉字输入验证码 主要包含两个类,一个是生成验证码,一个是判断验证码输入是否正确 实现原理非常简单,将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码 ...
- Android Touch(1)事件的传递流程(*)
1,Activity,ViewGroup,View的关系 2,触摸事件 3,传递事件时的重要函数 4,事件传递流程参考图 5,其它参考资料 1,Activity,ViewGroup,View的关系 本 ...
- leetcode:Isomorphic Strings
Isomorphic Strings Given two strings s and t, determine if they are isomorphic. Two strings are isom ...
- android--多View切换viewpager
网上看到viewpager的多view动画切换,模仿制作了一个 学习到了. 先看效果图: 先看主类的layout <LinearLayout xmlns:android=" ...
- CSS 中定位的使用
position relative 设置区块基准点为左上角(相对定位 以区块的左上角为基准点 仍然会暂居原来的位置) a.不影响元素本身的特性: b.不使元素脱离文档流: c.如果没有定位偏移量,对元 ...