Android App中使用全局Toast

自定義的FlexibleToast主要功能:

  1. 支持默認(rèn)格式,自上向下布局為ImageView、TextView、TextView,三個(gè)控件可以自由組合顯示或隱藏
  2. 支持Top,Center,Bottom的位置顯示,默認(rèn)Bottom和TOAST_SHORT顯示。
  3. 可以傳入自定義的layout的View,支持其他自定義的顯示
  4. 共用一個(gè)Toast對(duì)象,防止多次Toast重疊以及并顯示時(shí)間的累加,該控件僅保留最后一次的文本、顯示時(shí)間等設(shè)置。
  5. 在app自己自定義的Application中創(chuàng)建的Toast,Activity,F(xiàn)ragment,Adapter中都可以直接調(diào)用。
  6. 主線程或者子線程可以直接調(diào)用。
  7. 使用簡(jiǎn)單,先創(chuàng)建一個(gè)控制toast各種屬性的builder,然后直接調(diào)用toastShowByBuilder(builder)即可。

配置和使用步驟:

  1. 在自定義的單例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的地方使用了。

  2. 使用方法:
    buidler中設(shè)置想要的樣式,包括顯示什么元素,位置,時(shí)長(zhǎng)。
    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è)置都是無(wú)效的了。
    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);

  3. 關(guān)于初始化Toast的Context,源碼中的doc是這樣寫(xiě)的:

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頁(yè)面中有這兩個(gè)例子。

  1. Demo地址:
    https://github.com/maoranbian/MTime
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容