Android Toast消息提示的实现与使用

Android开发中,Toast是一种轻量级的消息提示方式,它可以在屏幕上显示一个短暂的消息,并且用户可以与之交互。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。

设置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添加图片

要向标准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,首先需要定义该布局。以下是自定义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(); } }); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485