Toast
Toast是一个消息提示组件
实例化的方法
- 得到一个Toast的两种方法:
- 新建 Toast toast = new Toast(context);
- 调用静态方法makeText
toast = Toast.maleText(context,“MSG”,Toast.LENGTH_SHORT);
注意这两种方式都能获得toast对象,但是两种方法需要的参数不同,第一种方式需要另外设置msg和显示时间
设置显示的位置
- toast.setGravity(Gravity.CENTER,0,0);
Toast的makeText方法返回值是Toast类型,需要弹窗要执行show方法。在此之前可以调用setGravity方法来设置居中,Gravity.CENTER 是常量,表示居中,后面两个参数分别表示xy轴的偏移量
设置显示时间
两种方法:
- 调用makeText的时候设置
- 调用setDuration方法。duration是持续时间的意思
- 时间是Toast类的常量,有长短两种
例如:toast.setDuration(Toast.LENGTH_LONG);//设置显示时长
自定义显示内容
可以自定义显示内容,比如加个图片什么的。这样需要自定义一个视图,然后通过setView方法设置到toast中,这样就不需要makeText了。
简单封装
设计封装类的原因是让弹窗显示时间不要叠加。
之所以会叠加是因为之前的弹窗都是单独的Toast,每个都要等上一个显示结束才回开始。
所以这里把这个封装类的变量做成静态变量,所有弹窗都共用一个Toast,每次新出一个弹窗并没有新建,而只是把这个
Toast的显示内容改变了,然后重新调用了show方法。
public class ToastUtil {
public static Toast mToast;
public static void showMsg(Context context, String msg){
//若为null直接赋值,并传进msg和显示时间,若已有值只需改变显示内容msg即可
if (mToast == null) {
//得到Toast对象可以用new Toast(context),也可以用makeText,后面这个要传3个参数
mToast = Toast.makeText(context,msg,Toast.LENGTH_SHORT);
}
mToast.setText(msg);
mToast.show();
}
}
案例:
package com.example.test.toast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.test.R;
import com.example.test.util.ToastUtil;
public class ToastActivity extends AppCompatActivity {
private Button btnT1,btnT2,btnT3,btnT4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toast);
btnT1 = findViewById(R.id.btn_toast1);
btnT2 = findViewById(R.id.btn_toast2);
btnT3 = findViewById(R.id.btn_toast3);
btnT4 = findViewById(R.id.btn_toast4);
Onclick onclick = new Onclick();
btnT1.setOnClickListener(onclick);
btnT2.setOnClickListener(onclick);
btnT3.setOnClickListener(onclick);
btnT4.setOnClickListener(onclick);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
private class Onclick implements View.OnClickListener {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_toast1:
Toast.makeText(ToastActivity.this,"taost1",Toast.LENGTH_SHORT).show();
break;
case R.id.btn_toast2:
/*Toast的makeText方法返回值是Toast类型,需要弹窗要执行show方法。在此之前可以调用setGravity方法
* 来设置居中,Gravity.CENTER 是常量,表示居中,后面两个参数分别表示xy轴的偏移量*/
Toast toast = Toast.makeText(getApplicationContext(),"taost2居中",Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
break;
case R.id.btn_toast3:
Toast toastCustom = new Toast(getApplicationContext());//新建一个Toast
//动态加载布局,找到视图view
LayoutInflater layoutInflater = LayoutInflater.from(ToastActivity.this);
View itemview = layoutInflater.inflate(R.layout.layout_toast,null);
ImageView iv = itemview.findViewById(R.id.toast_iv);
TextView tv = itemview.findViewById(R.id.toast_tv);
//设置图片资源
iv.setImageResource(R.drawable.daling);
//做到这部分想起手机有时候浏览网站的时候会遇到报毒的网页,而且关不掉,现在想来不过如此
tv.setText("您的电脑已中毒,点击查杀");
//把view的内容设置好后,传进toast里
toastCustom.setView(itemview);
toastCustom.setGravity(Gravity.CENTER,0,0);//设置显示位置居中
toastCustom.setDuration(Toast.LENGTH_LONG);//设置显示时长
toastCustom.show();
break;
case R.id.btn_toast4:
ToastUtil.showMsg(getApplicationContext(),"不排队显示");
}
}
}
}