UI组件--弹出组件

Toast

Toast是一个消息提示组件

实例化的方法

  • 得到一个Toast的两种方法:
    1. 新建 Toast toast = new Toast(context);
    2. 调用静态方法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轴的偏移量

设置显示时间

两种方法:

  1. 调用makeText的时候设置
  2. 调用setDuration方法。duration是持续时间的意思
  3. 时间是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(),"不排队显示");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值