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