开发过Android的童鞋都会遇到一个问题,就是在打印Toast提示时,如果短时间内触发多个提示,就会造成Toast不停的重复出现,直到被触发的Toast全部显示完为止。这虽然不是什么大毛病,但在用户体验上听让人发狂的。本篇博文就是介绍怎么自定义Toast提示,不仅能完美的解决上述问题,而且还能自定义提示UI。
先看一下效果图(左边是普通的toast提示,右边是自定义的):
光看效果图,可能还感受不到什么不同,点击多次之后就会发现文章开头说的情况。
接着看一下自定Toast的开发步骤:
·第一步:准备自定义Toast的布局文件。
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:id="@+id/container"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical" >
7
8 <TextView
9 android:id="@+id/txt_toast"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:padding="5dp"
13 android:background="#ccc"
14 android:textColor="#fff" />
15
16 </LinearLayout>
·第二步:编写一个独立的自定义Toast类或者方法,方便调用。
1 public void myToast(String msg){
2 if(toast == null){
3 toast = new Toast(this);
4 }
5 toast.setDuration(0);
6 toast.setGravity(Gravity.CENTER, 0, 0);
7 LayoutInflater inflater = this.getLayoutInflater();
8 LinearLayout toastLayout = (LinearLayout)inflater.inflate(R.layout.toast, null);
9 TextView txtToast = (TextView)toastLayout.findViewById(R.id.txt_toast);
10 txtToast.setText(msg);
11 toast.setView(toastLayout);
12 toast.show();
13 }
·第三步:调用普通Toast提示,和自定义Toast,查看效果。布局文件只有两个按钮,比较简单就不贴了。
1 bnToast.setOnClickListener(new OnClickListener() {
2 @Override
3 public void onClick(View arg0) {
4 Toast.makeText(getApplicationContext(), "普通toast提示", Toast.LENGTH_SHORT).show();
5 }
6 });
7 bnMyToast.setOnClickListener(new OnClickListener() {
8 @Override
9 public void onClick(View arg0) {
10 myToast("自定义toast提示");
11 }
12});