Android 用户界面---广播通知(Toast Notifications)
广播通知(Toast Notifications)
广播通知是在窗口表面弹出的一个消息。它只填充消息展现需要的空间,并且用户当前的Activity依然可见和可交互。通知自动的渐入渐出,不接受交互事件。
下面图1显示一个例子是闹钟应用的广播通知,一旦闹钟被打开,就会在你设置的提醒时间显示一个广播通知。
图1
广播通知能够由Activity或Service创建和显示。如果你创建了一个源自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对象,以便获取和定义ImageView和TextView元素的内容。最后,用Toast(Context)方法创建一个广播通知,并设置了一些广播通知的属性,如Gravity常量和持续显示时间。然后调用setView(View)方法,把它传递给要填充的布局对象。然后调用show()方法显示这个定制的广播通知。
注意:除非你要用setView(View)方法定义布局,否则不要使用公共的Toast类构造器。如果不使用定制的布局,必须使用makeText(Context, int, int)方法来创建广播通知。