框架需要解決的問題
- 自定義標(biāo)題定制
- 數(shù)據(jù)的處理,包括刷新,加載數(shù)據(jù),已經(jīng)數(shù)據(jù)為空的處理機(jī)制
- 全局的功能實(shí)現(xiàn),沉浸式狀態(tài)欄,滑動(dòng)退出等
- 提供便捷的工具類
框架的可移植性
為了便于framework庫的移植,上層framework庫不做具體應(yīng)用場(chǎng)景的封裝,僅只做接口的定義和調(diào)用。
框架中的Fragment概覽
FrameworkFragment提供抽象標(biāo)題操作相關(guān)的接口
DataFragment輸入FrameworkFragment的子集,提供數(shù)據(jù)相關(guān)的操作接口,比如是刷新數(shù)據(jù),數(shù)據(jù)為空的,數(shù)據(jù)異常的處理接口,但不包含分頁相關(guān)操作
RecycleFragment屬于DataFragment的子集,以Item的形式提供了RecycleView的實(shí)現(xiàn)。提供了列表,九宮格,瀑布流等形式的布局展現(xiàn),同時(shí)提供了分頁展示的功能
使用過程中想了解的問題
項(xiàng)目中大多數(shù)頁面都是如何一個(gè)布局,標(biāo)題欄狀態(tài)圖標(biāo)等;
采用了下拉刷新的布局,如何給予recycle fragment 進(jìn)行自定義來實(shí)現(xiàn)
如何通過接口定義幾個(gè)方法,來分別實(shí)現(xiàn)頁面數(shù)據(jù)請(qǐng)求然后繪制頁面的邏輯;
幾個(gè)Fragment切換狀態(tài)恢復(fù)保存邏輯是如何思考來實(shí)現(xiàn)的,這時(shí)就可以提一些類似fragment重疊的bug,包括數(shù)據(jù)保存恢復(fù)的使用注意點(diǎn)等;
非列表頁面當(dāng)時(shí)是如何考慮的,定義實(shí)現(xiàn)接口的初衷和想法;
自定義標(biāo)題的加載流程
標(biāo)題是基于BaseActivity實(shí)現(xiàn)的,從流程圖我們可以看到,通過setContentView(int layout),我們實(shí)現(xiàn)了對(duì)布局生成的代理。通過代理,我們?cè)赩iew的上層增加了RootLayout作為ContentView的父控件,(RootLayout繼承自RelativeLayout,主要是為了解決引入沉浸式狀態(tài)欄而引入的bug,具體是指,當(dāng)界面為沉浸式顯示時(shí),點(diǎn)擊輸入法會(huì)導(dǎo)致界面的展示不符合預(yù)期)通過DefaultTitleTool的addTitleView()生成帶有標(biāo)題的ContentView。
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); if (!isPinTitle) { params.addRule(RelativeLayout.BELOW, R.id.title_layout); } rootView.addView(contentView, params); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {mStatusBar = new View(context);mStatusBar.setId(R.id.view_status_bar);mStatusBar.setBackgroundColor(context.getResources().getColor(R.color.ch1));rootView.addView(mStatusBar,LayoutParams.MATCH_PARENT,getStatusBarHeight(context)); rootView.addView(mTitleView); ((LayoutParams) mTitleView.getLayoutParams()).addRule(RelativeLayout.BELOW, R.id.view_status_bar); } else { rootView.addView(mTitleView); }
Ps:重寫B(tài)aseActivity中的**isPinTitle()**方法可以設(shè)置標(biāo)題跟傳入的ContentView是上下排列還是標(biāo)題欄覆蓋在ContentView之上,默認(rèn)標(biāo)題欄是上下排列的,覆蓋模式的效果可以參考個(gè)人主頁標(biāo)題欄的實(shí)現(xiàn)。
##
