Android中如何優雅的顯示載入介面

2021-10-14 01:31:26 字數 2702 閱讀 3736

github位址

gradle:

//專案gradle中

allprojects

}}//模組gradle中

implementation 'com.github.goodluck028:showloading:1.0.3'

使用方法

//activity

loadingshow.with(mainactivity.this).showloading();

loadingshow.with(mainactivity.this).dismiss();

//fragment

loadingshow.with(testfragment.this).showloading();

loadingshow.with(testfragment.this).dismiss();

//view

textviewtestview=findviewbyid(r.id.tv_test_view);

loadingshow.with(testview).showloading();

loadingshow.with(testview).dismiss();

注意事項

在fragment的oncreateview()方法中使用會無效,是由於fragment的載入機制引起的,建議在onresume()方法中使用,後續版本想辦法解決。

實現思路

找到需要顯示loading頁的view,然後把它從view樹中打斷,再包裹上乙個framlayout,然後再接回原來的view樹中。

actively中的view

網上很多方法是這樣的

getwindow().getdecorview().findviewbyid(android.r.id.content)
我通過以上方法拿到的是個null,可能是和我的android sdk版本有關。

viewgroup decor = (viewgroup) activity.getwindow().getdecorview();

viewgroup contentroot = (viewgroup) decor.getchildat(0);

viewgroup bar = (viewgroup) contentroot.getchildat(1);

actionbaroverlaylayout act = (actionbaroverlaylayout) bar.getchildat(0);

view content =null;

try catch (exception ex)

層層包裹,最終我們拿到乙個actionbaroverlaylayout,這還不是我們真正想要的view,通過斷點除錯,我們發現真正的view是乙個私有變數mcontent。這就好辦了,通過反射拿出。至此,我們通過actively拿到了想要的view。

這裡要注意的一點是,可能其它版本的sdk有不同的實現,需要根據實際情況調整以上**。

fragment中的view

fragment中的view獲取起來是非常簡單的。

fragment.getview()
打斷view幷包裹framelayout

我們要找到原view在父view中的布局引數和index,這個好辦:

//替換注入framelayout

mframelayout =new framelayout(mcontentview.getcontext());

mframelayout.setlayoutparams(mcontentview.getlayoutparams());

viewgroup parent = (viewgroup)mcontentview.getparent();

for (int i =0; i < parent.getchildcount(); i++)

}//嫁接使用者view

framelayout.layoutparams lp =new framelayout.layoutparams(framelayout.layoutparams.match_parent, framelayout.layoutparams.match_parent);

mcontentview.setlayoutparams(lp);

mframelayout.addview(mcontentview);

顯示loading或者error頁面

有了前面幾步的操作,剩下的就是在注入的framelayout中動態顯示自己想要的view了。

framelayout.layoutparams lp =new framelayout.layoutparams(framelayout.layoutparams.match_parent, framelayout.layoutparams.match_parent);

view.setlayoutparams(lp);

mframelayout.addview(view);

關於我

如何優雅的限制文字顯示

lang en charset utf 8 documenttitle body lispan style head 文字內容文字內容文字內容文字內容文字內容li 文字內容文字內容文字內容文字內容文字內容li 其實寫多少都無所謂,我只能看到這麼多,就這麼多,反正不可以再多了span ul body ...

如何優雅的控制文字顯示行數

如何簡單有效的隱藏超出長度的多行文字呢?曾經覺得只能通過指令碼輔以配置才能比較完美的解決這個問題,這兩天才發現原來webkit瀏覽器中已經有完美的解決方案了。這篇文章介紹了隱藏多行文字的幾種方式。下面介紹下webkit瀏覽器中純css的解決方案。line clamplook,就這麼簡單。webkit...

前端如何優雅地顯示 JSON

json.cn 是我們開發過程中,經常用來格式化顯示json字串的工具 那麼如何在自己編寫的前端介面顯示同樣風格的 格式化之後json字串呢?網上流傳的版本顯示出來效果並不盡如人意,因此小改了一下。pre csspre string number boolean null key jssyntaxh...