Android自定義Toast,並解決toast不重複顯示

一、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

相關文章
相關標籤/搜索