淺談Android動態(tài)頁面(一)

這是一個很微妙的東西,可能平時經(jīng)常用到,但是沒注意,我想對這個內(nèi)容進行一個總結(jié)并提出一些看法,談的是動態(tài)頁面,不是動態(tài)布局。

一.什么是動態(tài)頁面

什么是動態(tài)頁面?我認為是一種在開發(fā)時的設計思想,最終展示的頁面會隨著數(shù)據(jù)的改變而改變,或者說會根據(jù)數(shù)據(jù)而展示頁面。

我的觀點是:
頁面由數(shù)據(jù)去決定,我稱它為動態(tài)頁面(主要是我不知道專業(yè)術語叫什么)

比如我們經(jīng)常使用的RecyclerView,我覺得它就是一個動態(tài)頁面,因為它的展示會隨數(shù)據(jù)的改變而改變,比如說RecyclerView要展示多少條數(shù)據(jù),一個Item里面要展示成什么樣子的。這些都是由數(shù)據(jù)去決定的。還有RecyclerView也體現(xiàn)出了動態(tài)頁面的一個特性,復用性。不管在什么地方都能使用RecyclerView并且還能展示出來不同的效果,而展示出不同效果的原因是因為數(shù)據(jù)不同。

二.舉個例子

image.png

比如說,我們經(jīng)常有這樣的操作,我做一個學社區(qū)APP,你的首頁會根據(jù)我是否登錄而展示不同的狀態(tài),比如說我登錄了,這個activity就展示更多內(nèi)容,我沒登錄,這個activity就展示較少的內(nèi)容。
有人會說,這樣的需求我們經(jīng)常做啊。是的,我們經(jīng)常會有這樣的需求,而有些大屌做多了,一拿到這樣的需求就能很快的去完成,甚至每次搭頁面的時候都會優(yōu)先考慮動態(tài)。而很多新人,比如我這種,沒有做多,沒這樣的概念,做起來會很容易出問題,所以我才想寫一個總結(jié)以免以后再犯錯,為什么大神不寫,大神都不屑寫這些東西。

再舉個栗子。我開發(fā)一個多列項選擇的模塊,比如我們經(jīng)常會看到這樣的功能。

image.png

左邊一個列表,右邊一個列表,如果你把布局寫死,那它始終就是兩列,而我可以把這樣的需求用動態(tài)頁面去實現(xiàn),這樣的話,我就能很輕易的實現(xiàn)3個列表,4個列表,甚至更多個列表。
先展示一下寫的一個小demo吧。

15051384411381505138249369.gif

還有一張兩列的gif壞掉了,沒事,我就只展示多頁的吧。我這里寫了一個4頁的demo
用法很簡單

<com.example.kylinarm.multilisttest.MultiListView
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        app:count = "4"
        android:id="@+id/mv_content"
        >
    </com.example.kylinarm.multilisttest.MultiListView>

app:count 是最大展示多少列,默認為兩頁.

        mvContent.setAllWeight(1,1,1);
        mvContent.setLayoutManager();
        mvContent.setAdapter(mockResult(),this);

第一行是設置每一列的比例,第二行是初始化布局,第三行是設置數(shù)據(jù)。

這么簡單的調(diào)用,就能實現(xiàn)一擴展性這么好的動態(tài)布局。但是我也總結(jié)出了一個規(guī)律,雖然調(diào)用簡單,但是封裝的內(nèi)容很復雜,越是復雜的布局,使用的算法就越復雜。

三.動態(tài)布局總結(jié)

1.概念
首先希望要有這樣的一個概念(講給自己聽),搭建一個模塊時,優(yōu)先考慮去實現(xiàn)動態(tài),如果實在無法實現(xiàn),再去寫靜態(tài)的。什么叫靜態(tài),比如我們(新手)經(jīng)常做的,把布局寫死,這樣要你改布局的話你要怎么做,要么加上需要改動后的布局隱藏,但這樣也只能適應兩種情況啊,多加一種情況你又要改xml布局。要么寫兩套布局,那如果多加一種情況你又要多寫一套布局。這樣就每次改需求你都要去動布局。而像我上面寫的demo,你要求展示多少列,我就改個數(shù)字就行,而且返回多少列的情況我都能適配。

2.寫成動態(tài)的雖然比靜態(tài)的更耗時間,但是代碼量比靜態(tài)的多不了多少,而且功能比靜態(tài)的強大很多。

3.動態(tài)頁面依賴于數(shù)據(jù),頁面會根據(jù)數(shù)據(jù)的改變而改變,還有需要適配,你可以把適配想成一種數(shù)據(jù)與頁面對接的邏輯的封裝,就像RecyclerView有適配器一樣。

4.動態(tài)頁面需要真正的涉及到數(shù)據(jù)結(jié)構(gòu)和算法。頁面的展示會根據(jù)返回數(shù)據(jù)的結(jié)構(gòu)而定,展示的邏輯也需要相應的算法去實現(xiàn)。

5.總的一句話,動態(tài)的東西肯定比靜態(tài)的牛X,所以不光是頁面,很多地方,如果使用動態(tài)的思維去開發(fā)模塊,一定會比靜態(tài)的功能強大很多。

關于我寫的demo我想放到下篇去講,現(xiàn)在太晚了,也寫不了太多東西。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容