瞭解相關更多技術,可參考《沉浸式狀態欄+ScrollView頂部伸縮+ActionBar漸變》,最近在用coordinatorLayout作一些特效,發現網上有好多人已經走完了坑,藉此咱們來總結一把。android
一言不合就上個圖,仍是動態的
面試
主要是找了半天,好多人說的都不夠詳細,並且有好多注意事項沒有說明,因此走了好多彎路,這個地方就是解決那些關鍵疑問的,這些疑問清楚了才能真正掌握它的用法app
代碼示例(activity的xml代碼,只須要xml配置就可實現上面這麼炫酷的效果了,是否是超讚呢,後面有分析哦):框架
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="200dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="170dp" app:contentScrim="@color/colorAccent" app:expandedTitleMarginBottom="100dp" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:title="我是collapsebar的標題"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="第一個固定(pin)" android:textSize="40sp" app:layout_collapseMode="pin" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:text="不設置,跟隨滑動" android:textSize="40sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:text="視察效果(parallax)" android:textSize="40sp" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="30dp" android:layout_gravity="top" android:background="#600f" app:layout_collapseMode="pin"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是toolbar" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="appbar以內,collap以外" android:textColor="#0f0" /> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/n_scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="哈" android:textColor="#0f0" android:textSize="200sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="哈" android:textColor="#0f0" android:textSize="200sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="哈" android:textColor="#0f0" android:textSize="200sp" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="哈" android:textColor="#0f0" android:textSize="200sp" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout>
1. CoordinatorLayout繼承自viewgroup,可是使用相似於framLayout,有層次結構,後面的佈局會覆蓋在前面的佈局之上,但跟behavior屬性也有很大關係,的app:layout_behavior屬性,只有CoordinatorLayout的直接子佈局才能響應,因此不要作徒勞無功的事佈局
2. CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout結合起來才能產生這麼神奇的效果,不要想固然的光拿着CoordinatorLayout就要玩出來(剛接觸的時候我也有這種想法),累死你字體
3. AppBarLayout:繼承自lineLayout,使用時其餘屬性隨lineLayou,已經響應了CoordinatorLayout的layout_behavior屬性,因此他能搞出那麼多特效來動畫
4. AppBarLayout的直接子控件能夠設置的屬性:layout_scrollFlagsspa
5. CollapsingToolbarLayout,字面意思是摺疊的toolbar,它確實是起到摺疊做用的,能夠把本身的自佈局摺疊 繼承自framLayout,因此它的直接子類能夠設置layout_gravity來控制顯示的位置,它的直接子佈局可使用的屬性:app:layout_collapseMode(摺疊模式):可取的值以下:3d
6. toobar最好是放在CollapsingToolbarLayout,也不是沒有其餘用法,可是在這套系統中通常只能放在CollapsingToolbarLayout裏面,才能達到好的效果,這裏toolbar同時設置layout_gravity和app:layout_collapseMode時有一些比較複雜的狀況.不一一做介紹,由於通常咱們只會把toolbar放在最上面(不用設置layout_gravity屬性,默認的),而且設置app:layout_collapseMode爲pin,讓他固定在最頂端,有興趣的本身試試其餘狀況,code
7. 告你一個驚天大冪冪:只要CollapsingToolbarLayout裏面包含有toolbar那麼CollapsingToolbarLayout的摺疊後高度就是toolbar的高度,至關於CollapsingToolbarLayout設置了minHeight屬性
8. 再告訴你一個驚天大咪咪:CollapsingToolbarLayout摺疊到最頂端時,它就是老大,會處於最上層,包括toolbar在內,全部的佈局都會被他蓋住,顯示不出來.
**9. CollapsingToolbarLayout 本身的屬性 說明,不是直接子佈局可用的,是本身能夠用的屬性
contentScrim摺疊後的顏色也是展開時的漸變顏色,效果超讚.** title標題,若是設置在摺疊時會動畫的顯示到摺疊後的部分上面,拉開時會展開,很好玩的 expandedTitleMargin當title文字展開時文字的margin,固然還有marginTop等屬性,腦補吧 app:collapsedTitleTextAppearance=」@style/Text」摺疊時title的樣式裏面能夠定義字體大小顏色等 app:collapsedTitleTextAppearance=」@style/Text1」摺疊時title的樣式裏面能夠定義字體大小顏色等 固然還有一些,本身試試吧,如今的這些已經徹底夠用了**
10. 還有最後一個問題:怎麼實現固定表頭,這個也簡單,寫一個佈局放在CollapsingToolbarLayout以後,AppBarLayout以內便可,xml文件中本身找找看吧.你要是問若是放在CollapsingToolbarLayout以前,AppBarLayout以內會怎麼樣?這樣摺疊佈局就不起做用了.不會摺疊了.
CoordinatorLayout是一個「增強版」的 FrameLayout,咱們只須要知道他兩個做用
在咱們作 Material Design 風格的app時一般都使用 CoordinatorLayout 做爲佈局的根節點,以便實現特定的UI交互行爲。
咱們能夠用它來作各類經常使用的特效,如:
Toolbar + TabLayout 實現 TabLayout 置頂效果
浸入式 + CollapsingToolbarLayout
Fragment + 不一樣風格佈局
更多能夠參考: https://www.jianshu.com/p/e9d...
但願你們少走彎路吧.其實寫帖子挺好的,由於你寫的時候也是爲本身總結,之後本身用的時候方便找,若是不寫可能下次用的時候須要從新學一遍了,因此無論帖子有沒有人看,本身必定要多寫,跟寫筆記還不同,由於帖子你是讓別人看的,你會盡可能寫的好一點,之後本身也會省事,寫筆記是給本身看的,不怕丟人.