Toast

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

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

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

基础

首先,用makeText()方法实例化一个Toast对象。这个方法需要三个参数:

  • 应用程序的Context对象

  • 要显示的文本消息

  • 通知持续表示的时间

这个方法会返回一个合适的被实例化的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)方法来改变这个位置。这个方法有三个参数:

  • Gravity常量(详细参照Gravity类)

  • X轴偏移量

  • 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>

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

Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1