Toast.makeText(getApplicationContext(), "Toast", Toast.LENGTH_LONG).show()
其中makeText至關於Toast類中的一個構造函數,他會根據你輸入的參數來構造一個新的Toast返回給你。java
第一個參數是一個context,能夠選擇直接調用getApplicationContext函數來輸入,也能夠輸入當前的Activity的名字來輸入,如:ToastActivity.this數組
第二個參數是一個String,用來表示Toast的輸出內容緩存
第三個參數是Toast的顯示時間,LENGTH_LONG表示顯示2side
Toast toastCenter = Toast.makeText(getApplicationContext(), "居中Toast", Toast.LENGTH_LONG); toastCenter.setGravity(Gravity.CENTER, 0, 0); toastCenter.show();
調用makeText生成一個Toast,並調用setGravity將其位置設置爲居中便可函數
// 首先須要一個Toast自定義顯示的佈局layout_toast.xml // 自定義爲一個LinearLayout,裏面包括了一個ImageView(id=iv_toast)和一個TextView(id=tv_toast) Toast toastCustom = new Toast(getApplicationContext()); LayoutInflater inflater = LayoutInflater.from(ToastActivity.this); View view = inflater.inflate(R.layout.layout_toast, null); ImageView imageView = (ImageView) view.findViewById(R.id.iv_toast); TextView textView = (textView) view.findViewById(R.id.tv_toast); imageVIew.setImageResource(R.drawable.icon_simle); // 用drawable/icon_simle.png圖片做爲layout_toast佈局文件中的imageView的圖片 textView.setText("自定義Toast"); toastCustom.setView(view); toastCustom.show();
須要使用一個佈局文件時,經過LayoutInflater來構造一個基於如今的activity的inflater,經過inflater來幫咱們找到咱們須要的佈局文件。佈局
LayoutInflater inflater = LayoutInflater.from(ToastActivity.this); View view = inflater.inflate(R.layout.layout_toast, null);最後經過view以及方法findViewById來找到當前的佈局文件中的構成組件post
ImageView imageView = (ImageView) view.findViewById(R.id.iv_toast); TextView textView = (textView) view.findViewById(R.id.tv_toast);而後經過組件各自的方法來實現咱們須要顯示的內容學習
imageVIew.setImageResource(R.drawable.icon_simle); // 用drawable/icon_simle.png圖片做爲layout_toast佈局文件中的imageView的圖片 textView.setText("自定義Toast");最後把咱們須要顯示的自定義toast經過setView方法自定義咱們的toast動畫
toastCustom.setView(view);
public class ToastUtil { public static Toast mToast; public static void showMsg(Context context, String msg) { if (mToast == null) { mToast = Toast.makeText(context, msg, Toast.LENGTH_LONG); } else { mToast.setText(msg); } mToast.show(); } }
運用以上簡單的封裝,咱們能夠達到屢次點擊生成Toast的按鈕,只會按照最後一次點擊來顯示Toast的目的。ui
而這個封裝與以前的按鈕的區別是:以前的按鈕每按一次都會創造一個新的Toast,而此次只會在第一次創造新的Toast,他調用的是同一個Toast的show方法。
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this); builder.setTitle("請回答").setMessage("你以爲課程如何") .setIcon(R.drawable.icon_smile) .setPositiveButton("棒", new DialogInterface.OnClickListener() { @override public void onClick(DialogInterface dialog, int which) { ToastUtil.showMsg(DialogActivity.this, "你很誠實"); } }).setNeutralButton("還行", new DialogInterface.OnClickListener() { @override public void onClick(DialogInterface dialog, int which) { ToastUtil.showMsg(DialogActivity.this, "你再瞅瞅"); } }).setPositiveButton("很差", new DialogInterface.OnClickListener() { @override public void onClick(DialogInterface dialog, int which) { ToastUtil.showMsg(DialogActivity.this, "瞎說"); } }).show();
經過AlertDialog的生產者模式Builder來生成AlertDialog
因爲builder的大部分方法返回的都是builder自己,因此咱們能夠經過一系列的.來調用造成調用串
記得最後要調用show來顯示AlertDialog
//沒有radioButton的單選AlertDialog AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this); String[] array = new String[]{"男", "女"}; builder1.setTitle("選擇性別").setItems(array, new DialogInterface.OnClickListener() { @override public void onClick(DialogInterface dialog, int which) { ToastUtil.showMsg(DialogActivity.this, array[which]); } }).show();
//有radioButton的單選AlertDialog AlertDialog.Builder builder2 = new AlertDialog.Builder(DialogActivity.this); String[] array = new String[]{"男", "女"}; builder2.setTitle("選擇性別").setSingleChoiceItems(array, 0, new DialogInterface.OnClickListener() { @override public void onClick(DialogInterface dialog, int which) { ToastUtil.showMsg(DialogActivity.this, array[which]); } }).show();
有radioButton的單選AlertDialog中setSingleChoiceItems中
第一個參數是一個String的數組,表示顯示的列表
第二個參數是選定的數組的下表,在例子中,0則表示選中男,1則表示選中女
第三個是一個ClickListener
此時咱們能夠經過點擊非AlertDialog的區域來取消AlertDialog的顯示,若是咱們但願用戶必定要選擇一個按鈕才能取消顯示,咱們須要
讓builder產生的AlertDialog不支持本身取消:setCancelable(false)
在onClick函數中調用dismiss方法
new DialogInterface.OnClickListener() { @override public void onClick(DialogInterface dialog, int which) { ToastUtil.showMsg(DialogActivity.this, array[which]); dialog.dismiss(); } }
AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this); String[] array = new String[]{"唱歌", "跳舞", "寫代碼"}; boolean[] isSelected = new Boolean[]{false, falst, true}; builder3.setTitle("選擇興趣").setMultipleChoiceItems(array, isSelected, new DialogInterface.OnClickListener() { @override public void onClick(DialogInterface dialog, int which) { ToastUtil.showMsg(DialogActivity.this, array[which]+":"+isSelected[which]); } }).show();
多選樣式即從setSingleChoiceItems變成setMultipleChoiceItems,
第二個參數從選定的數組下標(int)改爲是否選定的列表(boolean[])
// 自定義一個佈局layout_dialog.xml // 例子中包含一個EditText(id=et_username)表示輸入用戶名,一個EditText(id=et_password)表示輸入密碼,一個登錄按鈕(id=btn_login) AlertDialog.Builder builder4 = new AlertDialog.Builder(DialogActivity.this); LayoutInflater inflater = LayoutInflater.fron(DialogActivity.this); View view = inflater.inflate(R.layout.layout_dialog); EditText eUserName = (EditText) view.findViewById(R.id.et_username); EditText ePassWord = (EditText) view.findViewById(R.id.et_password); Button btnLogin = (Button) view.findViewById(R.id.btn_login); btnLogin.setOnClickListener(new View.OnClickListener() { @override public void onClick(View v) { // } }) builder4.setTitle("請登陸").setView(view).show();
其中咱們直接用setView設置自定義樣式
能夠直接在xml聲明
,能夠自定義style, style="???.Horizontal"時爲水平的ProgressBar,
能夠聲明progress="10"說明此時的進度條進度
聲明secondaryProgress說明進度條的二級進度(視頻緩存之類的)
聲明max說明進度條最大進度是多少
// 能夠在Activity中直接更改進度條的進度 mpb = (ProgressBar) findViewById(R.id.pb); mBtnStart = (Button) findViewById(R.id.btn_start); mBtnStart.setOnClickListener(new View.onClickListener { @override public void onClick() { handler.sendEmptyMessage(0); } }) mpb.setProgress(30); Handler handler = new Handler() { @override public void handleMessage(Message msg) { super.handleMessage(msg); if (mpb.getProgress < 100) { handler.postDelayed(runnable, 500); //延遲500ms發送一個信息給runnable } else { ToastUtil.showMsg(ProgressActivity.this, "加載完成"); } } } Runnable runnable = new Runnable() { @override public void run() { mpb.setProgress(mpb.getProgress() + 5); handler.sendEmptyMessage(0); } }
此處,咱們聲明一個handler接受消息,一個runnable發送消息,這個過程實際上是經過點擊按鈕,咱們模擬一個ProgressBar加載的過程,每過500ms發送一次信息給runnable讓他給progress加5進度直到進度爲100.
// 經過自定義一個xml文件來生成旋轉動畫,具體表現爲<animated-rotate/> // 而後使用ProgressBar時直接更改其style爲自定義的動畫便可
使用方法基本與AlertDialog相同