自定義的FlexibleToast主要功能:
- 支持默認(rèn)格式泳桦,自上向下布局為ImageView驱敲、TextView堂湖、TextView,三個(gè)控件可以自由組合顯示或隱藏
- 支持Top色查,Center邦危,Bottom的位置顯示毯侦,默認(rèn)Bottom和TOAST_SHORT顯示。
- 可以傳入自定義的layout的View米死,支持其他自定義的顯示
- 共用一個(gè)Toast對(duì)象,防止多次Toast重疊以及并顯示時(shí)間的累加贮庞,該控件僅保留最后一次的文本峦筒、顯示時(shí)間等設(shè)置。
- 在app自己自定義的Application中創(chuàng)建的Toast窗慎,Activity物喷,F(xiàn)ragment,Adapter中都可以直接調(diào)用遮斥。
- 主線程或者子線程可以直接調(diào)用峦失。
- 使用簡單,先創(chuàng)建一個(gè)控制toast各種屬性的builder术吗,然后直接調(diào)用toastShowByBuilder(builder)即可宠进。
配置和使用步驟:
在自定義的單例Application中添加如下代碼:
public class BaseApp extends Application {
//.....自己的其他代碼,該BaseApp必是單例的
// 全局的 handler 對(duì)象
private final Handler APPHANDLER = new Handler();
// 全局的 Toast 對(duì)象
private FlexibleToast flexibleToast;
// ........其他操作
// 在初始化資源的地方創(chuàng)建Toast
flexibleToast = new FlexibleToast(this);
public void toastShowByBuilder(final FlexibleToast.Builder builder) {
if (Looper.myLooper() != Looper.getMainLooper()) {
getAppHandler().post(new Runnable() {
@Override
public void run() {
flexibleToast.toastShow(builder);
}
});
} else {
flexibleToast.toastShow(builder);
}
}
//.....others
}
現(xiàn)在就可以在想Toast的地方使用了藐翎。使用方法:
buidler中設(shè)置想要的樣式,包括顯示什么元素实幕,位置吝镣,時(shí)長。
FlexibleToast.Builder builder = new FlexibleToast.Builder(this).setGravity(FlexibleToast.GRAVITY_TOP).setFirstText("first").setSecondText("second=" + System.currentTimeMillis());
BaseApp.getApp().toastShowByBuilder(builder);
如果想利用自己定義的布局昆庇,可以這樣使用:
其中R.layout.layout_toast_with_two_text是自己定義的布局末贾,此時(shí)builder中對(duì)ImageView和TextView的設(shè)置都是無效的了。
View toastView = LayoutInflater.from(this).inflate(R.layout.layout_toast_with_two_text, null, false);
TextView tvOne = (TextView) toastView.findViewById(R.id.tv_text_one);
TextView tvTwo = (TextView) toastView.findViewById(R.id.tv_text_two);tvOne.setText("customer one");tvTwo.setText("customer two");
FlexibleToast.Builder builder = new FlexibleToast.Builder(this).setCustomerView(toastView);BaseApp.getApp().toastShowByBuilder(builder);關(guān)于初始化Toast的Context整吆,源碼中的doc是這樣寫的:
The context to use. Usually your {@link android.app.Application} or {@link android.app.Activity} object.
Demo中將new Toast放到了自己的Application中拱撵,這樣那么子線程使用就能直接show,而子線程如果在使用的時(shí)候才new Toast表蝙,會(huì)Crash拴测,要么就要用handler去post到主線程中toast。也就是要保證toast的創(chuàng)建在主線程總府蛇。ToastDemo中的SensorList頁面中有這兩個(gè)例子集索。