Andorid的Toast(附Demo)


Demo地址:https://github.com/zGuangYuan/Androidstudio_example  


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了。 


猜你喜欢

转载自blog.csdn.net/qq_36243942/article/details/82622796
今日推荐