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