Android 用户界面---广播通知(Toast Notifications)

翻译 2012年03月23日 21:57:47

广播通知(Toast Notifications

广播通知是在窗口表面弹出的一个消息。它只填充消息展现需要的空间,并且用户当前的Activity依然可见和可交互。通知自动的渐入渐出,不接受交互事件。

下面图1显示一个例子是闹钟应用的广播通知,一旦闹钟被打开,就会在你设置的提醒时间显示一个广播通知。

图1

广播通知能够由ActivityService创建和显示。如果你创建了一个源自Service的广播通知,它会显示当前有焦点的Activity的前面。

如要需要用户对通知做出响应,请考虑使用状态栏通知。

基础

首先,用makeText()方法实例化一个Toast对象。这个方法需要三个参数:1.应用程序的Context对象;2.要显示的文本消息;3.通知持续表示的时间。这个方法会返回一个合适的被实例化的Toast对象。你能够用show()方法显示广播通知,显示方法如下:

Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast
.show();

这个示例程序给你演示大多数广播通知所需要做的每一件事情。你很少需要再做其他的事情。但是,你可能想要把广播通知放到不同的位置,甚至要使用自己的布局来替代那个简单的文本消息框。以下,将向你介绍如何实现这些想法。

给广播通知定位

标准的广播通知水平居中显示在屏幕底部附近,你能够通过setGravity(int, int, int)方法来改变这个位置。这个方法有三个参数:1.Gravity常量(详细参照Gravity类);2.X轴偏移量;3.Y轴偏移量。

例如,如果你想让通知显示在屏幕的左上角,你可以用下面这样的方法调用:

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

如果你想要向右移动位置,可以增加第二个参数的值。要向下移动,可以增加最后一个参数的值。

创建一个定制的广播视窗

如果一个简单的文本消息不同满足现实的需要,你可以给广播通知创建一个定制的布局。要创建一个定制的布局,可以在XML文件或应用程序代码中定义一个View布局,然后把根View对象传递给setView(View)方法。

例如,你可以用下面的XML文件创建一个如下图2所示的广播通知视窗。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             
android:id="@+id/toast_layout_root"
             
android:orientation="horizontal"
             
android:layout_width="fill_parent"
             
android:layout_height="fill_parent"
             
android:padding="10dp"
             
android:background="#DAAA"
             
>
   
<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="#FFF"
             
/>

</LinearLayout>

2

注意,LinearLayout元素的ID属性值是“toast_layout_root”。你必须使用这个ID的把XML的定义填充到布局中,方法如下:

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
                               
(ViewGroup) findViewById(R.id.toast_layout_root));

ImageView image = (ImageView) layout.findViewById(R.id.image);
image
.setImageResource(R.drawable.android);
TextView text = (TextView) layout.findViewById(R.id.text);
text
.setText("Hello! This is a custom toast!");

Toast toast = new Toast(getApplicationContext());
toast
.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast
.setDuration(Toast.LENGTH_LONG);
toast
.setView(layout);
toast
.show();

首先,用getLayoutInflater()方法(或getSystemService()方法)获取LayoutInflater对象,然后使用inflate(int, ViewGroup)方法把XML定义填充到布局中,这个方法的第一个参数是布局资源的ID,第二个参数要填充布局的View对象,本例是根View对象。你能够使用这个被填充的布局来查找布局中View对象,以便获取和定义ImageViewTextView元素的内容。最后,用Toast(Context)方法创建一个广播通知,并设置了一些广播通知的属性,如Gravity常量和持续显示时间。然后调用setView(View)方法,把它传递给要填充的布局对象。然后调用show()方法显示这个定制的广播通知。

注意:除非你要用setView(View)方法定义布局,否则不要使用公共的Toast类构造器。如果不使用定制的布局,必须使用makeText(Context, int, int)方法来创建广播通知。

Android中BroadcastReceiver广播使用及注意点

android中的广播用途很广,是四大组件之一。在android中可以看到它的各种应用,从系统发出的广播,用户自定义的广播等。 这里详细记录下广播的分类以及使用方法。 广播,是由两方面组成一个流程:广...
  • yangzhaomuma
  • yangzhaomuma
  • 2015年11月13日 14:12
  • 6099

Toast 不显示

做项目时发现 toast不显示 原因一:在非UI线程执行 建议使用handler显示 原因二:没有执行,逻辑错误 我的问题两个都不是,在接收广播后调用了toast   并且调用toast处使用了r...
  • u013151574
  • u013151574
  • 2016年09月22日 10:19
  • 472

Android用观察者模式代替广播通知刷新界面

 源码下载我们知道广播是夸进程的,所以不能什么时候都用广播,如果涉及到安全问题就最好别用广播,怕其他应用进程监听到你的广播。这里采用接口去实现广播的功能。 下面看实现代码: 1.首先我定...
  • sinat_29384657
  • sinat_29384657
  • 2016年08月22日 14:41
  • 1102

在非anctivity类中使用Toast

最近在做android的项目,需要在非UI线程中使用Toast,重点是要提供Looper。基础环境是API 21,android 5.0....
  • u011924665
  • u011924665
  • 2016年04月09日 21:23
  • 806

解决Android关闭通知消息权限无法弹出Toast的问题

最近在做项目时,遇到一个问题,有部手机就是Toast弹不出来。仔细想想可能权限的问题。后面网上搜索给出如下答案: 跟踪Toast的源代码,make方法省略,做了一些初始化的工作,show方法 ...
  • a3676212
  • a3676212
  • 2016年07月05日 12:51
  • 8608

【Android】当关闭通知消息权限后无法显示系统Toast的解决方案

前言不知道大家是否遇到了当你们的App在5.0以上系统中被用户关闭消息通知后(其实用户本身只是想关闭Notification的,猜测),系统的Toast也神奇的无法显示。当然这个问题并不复杂,有很多种...
  • qq_25867141
  • qq_25867141
  • 2016年10月13日 16:13
  • 8124

android 广播接收器之通知栏页面跳转

public class MyBroadcastReceiver extends BroadcastReceiver { private static int NOTIFY_ID = 10...
  • qishuo_java
  • qishuo_java
  • 2016年03月25日 11:43
  • 1938

安卓-封装实用的Toast工具类

大家好,Toast这个提示框大家都晓得,显示一段时间后自动消失,不能获得焦点。但是在使用中有些问题: 1)需要弹出一个新的Toast时,上一个Toast还没有显示完 2)可能重复弹出相同的信息 ...
  • wwt831208
  • wwt831208
  • 2017年01月25日 15:57
  • 2458

Android界面美化 -- 使用自定义Toast布局替代原生布局

Android自带的Toast实现了一个简单的消息提示框功能。虽然非常好用,但显示效果不佳,本文介绍如何对Toast的界面进行美化。...
  • ccpat
  • ccpat
  • 2015年09月08日 20:38
  • 13594

微信小程序开发常用技巧(7)——实现一个类似于Android toast效果动画

很多时候,我们在小程序中使用wx.showToast(),发现样式不是很好看,那么我们能不能做一个跟原生APP类似的toast呢?答案是肯定的。今天就利用微信小程序的动画wx.createAnimat...
  • qq_18325731
  • qq_18325731
  • 2017年07月20日 14:50
  • 471
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 用户界面---广播通知(Toast Notifications)
举报原因:
原因补充:

(最多只允许输入30个字)