一、Android自帶的Toast樣式固定,這裏咱們對其簡單的封裝。自定義一個適應咱們需求的Toastjava
private void createToastWindow(String text) { LayoutInflater inflater = LayoutInflater.from(App.getContext()); View view = inflater.inflate(R.layout.toast_layout, null); TextView tv = (TextView) view.findViewById(R.id.pop_view); tv.setText(text); Toast toast = new Toast(getApplicationContext()); view.setLayoutParams(new LinearLayout.LayoutParams( android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.MATCH_PARENT)); toast.setView(view); toast.setGravity(Gravity.TOP, 0, (int) App.getContext().getResources() .getDimension(R.dimen.titlebarHeight)); toast.show(); }
這段代碼即完成此功能,toast_layout.xml就是咱們toast的界面,這裏咱們能夠實現咱們想要的任何效果,也能夠顯示在屏幕的任何位置。android
二、Android的Taost機制是創建在系統級上的,不是依託那個界面的,這樣會致使咱們的Toast會重複顯示。假若咱們不斷點擊一個按鈕而後Toast會一直顯示,而且一個接一個須要等許久才能消失。這裏咱們來解決此問題。函數
解決此問題首先須要在Activity中定義一個Toast對象,我想這裏通常人都會封裝在基類中,本人推薦這樣作。動畫
private Toast toast;
而後穿件Toast的函數變成以下所示spa
private void createToastWindow(String text) { LayoutInflater inflater = LayoutInflater.from(App.getContext()); View view = inflater.inflate(R.layout.toast_layout, null); TextView tv = (TextView) view.findViewById(R.id.pop_view); tv.setText(text); if(toast == null){ Toast toast = new Toast(getApplicationContext()); } view.setLayoutParams(new LinearLayout.LayoutParams( android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.MATCH_PARENT)); toast.setView(view); toast.setGravity(Gravity.TOP, 0, (int) App.getContext().getResources() .getDimension(R.dimen.titlebarHeight)); toast.show(); }
和上面相比就改變了這裏 code
if(toast == null){ Toast toast = new Toast(getApplicationContext()); }
這樣咱們界面在擁有一個Toast的時候則不會去不斷的建立Toast,同時Toast的顯示的文字會被改變。orm
到此比較簡單的自定義Toast和解決Toast的重複顯示的問題獲得解決,這裏仍是用了原聲的Toast的機制,只不過是在此基礎上稍做控制,固然這也能知足咱們大多數時候的需求了。但若你想控制Toast的顯示進入退出動畫,那你須要深刻了解Toast的機制,查看其源碼重寫Toast這樣才能夠,主要方法以下:xml
params = new WindowManager.LayoutParams();對象
params.windowAnimations = R.anim.enter;get