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


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章