Toaset的总类:
开发中常见的使用场景主要有以下几种:
- 默认Toast
- 自定义位置Toast
- 带图片的Toast
- 自定义View的Toast
-
Toast是一个消息提示组件
-
可以设置显示的位置
-
自定义显示的内容
-
简单封装
例子:
新建一个Toast的包,然后在包里新建一个类,命名为ToastActivity.java,然后再MianActivity设置一个按钮从默认的UI界面跳转到Toast演示界面。
新建一个Empty Activity,命名为,ToastActivity
在MianActivity设置一个按钮跳转到Toast的演示窗口:
在activity_main布局文件添加一个控件:
MainActivity获取控件对象,为按钮绑定监听器:
在activity_Toast的布局文件设置三个按钮,用于Toast的演示:
获取控件的对象,用对象表示,并为其按钮设置监听器:
根据按钮弹出不同的Toast:
第一个直接弹出一个默认的Toast
第二个自定义Toast的位置,让他居中显示,因为makeText方法返回的是一个Toast,所以可以调用这个方法返回的对象的属性去设置Toast的位置:
自定义Toast,在Toast里添加一个图片:
图片来源:
新建一个布局文件去显示这个图片:
然后自layout_toast布局文件添加一个图片和一个文本控件:
整体代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#20000000"
android:gravity="center">
<LinearLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/IV_ToastId"
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="fitCenter"/>
<TextView
android:id="@+id/TV_ToastId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="@color/colorRed"
android:layout_marginTop="10dp"/>
</LinearLayout>
</LinearLayout>
回到ToastActivity中设置设置自定义按钮的弹出Toast的效果:
整体代码如下:
package com.example.yuan.e06_gridview.Toast;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.yuan.e05_listview.R;
public class ToastActivity extends AppCompatActivity {
//声明引用
private Button mToast_1;
private Button mToast_2;
private Button mToast_3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toast);
//获取控件的实体
mToast_1 =(Button) findViewById(R.id.Toast_ButtonId_1);
mToast_2 =(Button) findViewById(R.id.Toast_ButtonId_2);
mToast_3 =(Button) findViewById(R.id.Toast_ButtonId_3);
//设置监听器
setlistener();
}
private void setlistener(){
ToastButtonListener listener = new ToastButtonListener();
mToast_1.setOnClickListener(listener);
mToast_2.setOnClickListener(listener);
mToast_3.setOnClickListener(listener);
}
class ToastButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.Toast_ButtonId_1:
Toast.makeText(ToastActivity.this,"默认Toast",Toast.LENGTH_LONG).show();
break;
case R.id.Toast_ButtonId_2:
Toast toastCenter = Toast.makeText(ToastActivity.this,"Toast居中",Toast.LENGTH_LONG);
toastCenter.setGravity(Gravity.CENTER,0,0);
toastCenter.show();
break;
case R.id.Toast_ButtonId_3:
//生成Toast对象
Toast toast = new Toast(ToastActivity.this);
//把布局文件引入到ToastActivity这个Activity
LayoutInflater inflater = LayoutInflater.from(ToastActivity.this);
//布局的来源
View view = inflater.inflate(R.layout.layout_toast,null);
//获取控件实体,设置ImageView和TextView控件的内容
ImageView imageView = (ImageView) view.findViewById(R.id.IV_ToastId);
TextView textView = (TextView) view.findViewById(R.id.TV_ToastId);
imageView.setImageResource(R.drawable.toast1);
textView.setText("自定义Toast");
//为这个Toast设置显示的内容
toast.setView(view);
//显示内容
toast.show();
break;
}
}
}
}
运行这个应用程序:
有一个现象,比如我们多次点击应用程序的默认Toast按钮时,按多少次就出现多少次弹窗,但是这些弹窗是在排队一样的一个一个显示出来,在实际开发过程中,我们需要以最后一次的弹窗为准的额,如何实现?
新建一个公共类:在工程中新建一个包,命名为:util
在util这个包中新建一个类,命名为:ToastUtil:
整体代码:
package com.example.yuan.e06_gridview.util;
import android.content.Context;
import android.widget.Toast;
public class ToastUtil {
public static Toast mToast;
public static void showMsg(Context context,String msg){
//如果mToast为空,则创建一个Toast
if (mToast == null){
//返回一个Toast对象
mToast = Toast.makeText(context,msg,Toast.LENGTH_LONG);
}else{ //否则直接显示当前的Toast
mToast.setText(msg);
}
mToast.show();
}
}
新增加一个按钮用于效果的演示:
调用ToastUtil类的showMsg方法:
这样就可以直接显示最新的Toast了。