Android Toast

时间:2020-01-09 10:34:00  来源:igfitidea点击:

Android Toast是屏幕上显示的一条小消息,类似于工具提示或者其他类似的弹出通知。 "吐司"显示在活动的主要内容之上,并且仅在短时间内保持可见。该屏幕快照显示了" Toast"在屏幕上的外观:

上面的屏幕快照中," Toast"显示在屏幕底部(但我们可以更改)。

创建Toast

这是一个Android的Toast示例:

Toast toast = Toast.makeText(getApplicationContext(),
        "This is a message displayed in a Toast",
        Toast.LENGTH_SHORT);
    
toast.show();

Toast.makeText()方法是一种工厂方法,它创建一个Toast对象。该方法采用3个参数。首先,这些方法需要一个通过调用getApplicationContext()获得的"上下文"对象。注意:getApplicationContext()方法是活动内部存在的方法,因此上面的代码必须位于Activity子类中才能工作。

第二个参数是要在" Toast"中显示的文本。第三个参数是显示" Toast"的持续时间。 Toast类包含两个可以使用的预定义常量:Toast.LENGTH_SHORT和Toast.LENGTH_LONG。我们将不得不对这两个值进行试验,以查看哪种情况更适合情况。

Toast定位

我们可以使用setGravity()方法更改Toast消息在屏幕上的位置。这是一个Toast setGravity()示例:

toast.setGravity(Gravity.CENTER, 0, 0);

setGravity()方法的第一个参数指定Toast的整体位置。我们可以在Gravity类中使用以下常量来指定整体位置:

  • TOP
  • BOTTOM
  • LEFT
  • RIGHT
  • CENTER
  • CENTER_HORIZONTAL
  • CENTER_VERTICAL

这些常量中的每一个都定义了X或者Y方向上的位置," CENTER"常量除外,后者表示水平和垂直居中。我们可以使用|(或者)运算符组合这些常量,如下所示:

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

setGravity()方法的另外两个参数是X和Y偏移量,该偏移量由Gravity常数定义。例如,如果我们需要将" Toast"显示在顶部,水平居中,但要比顶部位置低20个像素,则可以使用以下" setGravity()"调用:

toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTALLY, 0, 20);

Toast自定义视图

可以为"Toast"定义自定义的"视图"。为此,首先必须为自定义"视图"创建一个布局XML文件。这是一个示例" Toast"布局XML文件:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/toast_root_view"
                  android:orientation="vertical" android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:background="@android:color/background_dark"
                  android:padding="16dp"
            >

        <TextView
                android:id="@+id/toast_header"
                android:textSize="20dp"
                android:textColor="@android:color/primary_text_dark"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        <TextView
                android:id="@+id/toast_body"
                android:textColor="@android:color/primary_text_dark"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

    </LinearLayout>

将此布局XML文件放入Android项目的/ app / src / main / res / layout目录中,并将其命名为my_toast.xml。

要将这个布局XML文件与Toast一起使用,请编写以下代码:

LayoutInflater inflater = getLayoutInflater();

View toastLayout = inflater.inflate(R.layout.my_toast,
        (ViewGroup) findViewById(R.id.toast_root_view));

TextView header = (TextView) toastLayout.findViewById(R.id.toast_header);
header.setText("Message for you:");

TextView body = (TextView) toastLayout.findViewById(R.id.toast_body);
body.setText("You have got mail!");

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

首先,我们需要获取" LayoutInflater"。我们可以使用它来膨胀(创建)由名为my_toast.xml的布局XML文件(由R.layout.my_toast引用)定义的View。

注意,findViewById(R.id.toast_root_view)调用是inflate()方法调用的第二个参数。这将在my_toast.xml布局XML文件中找到根ViewGroup(根ViewGroup具有ID toast_view_group)。该调用对于膨胀的"视图"来说是必要的,以便知道膨胀的"视图"内部的根" ViewGroup"是什么。

一旦创建了"视图",就可以从"视图"中获得两个" TextView"组件,并设置它们的文本。

最后,创建一个" Toast"对象,设置其重力(位置/对齐),持续时间," View",然后显示它。