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

微笑、不失礼 提交于 2020-03-08 17:12:55

广播通知(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)方法来创建广播通知。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!