在Android开发中,Toast是一种轻量级的消息提示方式,它可以在屏幕上显示一个短暂的消息,并且用户可以与之交互。Toast消息的显示和消失都是平滑的渐变效果,用户不能通过硬件“返回”键或其他方式关闭它。Toast的显示时长可以通过代码设置,通常用于显示简短的消息,但也可以通过自定义视图来增加图片等元素。Toast的位置也可以通过代码控制。
标准的Toast可以通过调用Toast类的静态makeText方法来创建。需要传递应用上下文、消息文本和显示时长作为参数。消息文本可以是直接的字符串,也可以是资源文件中存储的字符串。显示时长可以是短的(LENGTH_SHORT)或者长的(LENGTH_LONG)。默认时长是短的,但可以通过调用setDuration方法来设置。
Toast.makeText(getApplicationContext(),
"Hello, The Code Project!",
Toast.LENGTH_SHORT).show();
上述代码创建了一个Toast对象,设置了消息文本和显示时长,然后调用show方法显示Toast。
可以通过调用setGravity方法来设置Toast在屏幕上的位置。
Toast toast = Toast.makeText(getApplicationContext(),
"Hello, The Code Project!",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
第一个参数用于设置位置(Gravity类中有一系列预设的位置),第二和第三个参数定义了相对于第一个参数设置的位置的偏移量。
要向标准Toast添加图片,首先需要创建一个ImageView对象,并使用setImageResource方法从资源中设置其图片。然后获取标准视图(实际上是一个LinearLayout),并将新创建的ImageView对象添加到其中。
Toast toast = Toast.makeText(getApplicationContext(),
"Hello, The Code Project!",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView = (LinearLayout) toast.getView();
ImageView imageCodeProject = new ImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.codeprojectlogo);
toastView.addView(imageCodeProject, 0);
toast.show();
这样创建的Toast会在文本上方显示一个图片。
要创建具有自定义布局的Toast,首先需要定义该布局。以下是自定义Toast布局的XML代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="#ffffffff"
android:orientation="vertical"
android:id="@+id/llToast">
<TextView
android:layout_height="wrap_content"
android:layout_margin="1dip"
android:textColor="#ffffffff"
android:layout_width="fill_parent"
android:gravity="center"
android:background="#bb000000"
android:id="@+id/tvTitleToast"/>
<LinearLayout
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/llToastContent"
android:layout_marginLeft="1dip"
android:layout_marginRight="1dip"
android:layout_marginBottom="1dip"
android:layout_width="wrap_content"
android:padding="15dip"
android:background="#44000000">
<ImageView
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:id="@+id/tvImageToast"/>
<TextView
android:layout_height="wrap_content"
android:paddingRight="10dip"
android:paddingLeft="10dip"
android:layout_width="wrap_content"
android:gravity="center"
android:textColor="#ff000000"
android:id="@+id/tvTextToast"/>
</LinearLayout>
</LinearLayout>
然后需要将定义的布局设置到Toast中,并设置对话框标题、消息文本和图片。
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.customtoast, (ViewGroup) findViewById(R.id.llToast));
ImageView image = (ImageView) layout.findViewById(R.id.tvImageToast);
image.setImageResource(R.drawable.codeprojectlogo);
TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
title.setText("Attention");
TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
text.setText("Hello, The Code Project!");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
这样创建的Toast看起来像一个带有标题、图片和消息的对话框。
要从其他线程调用Toast,需要在类中定义一个Handler类型的属性:
Handler handler = new Handler();
假设有一个线程,需要调用显示Toast的方法:
new Thread(new Runnable() {
public void run() {
showToast();
}
}).start();
public void showToast() {
handler.post(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Hello, The Code Project!", Toast.LENGTH_SHORT).show();
}
});
}