CoordinatorLayout中設置layout_behavior的布局無法垂直居中問題解決

這兩天項目中需要實現一個頁面,大致的布局是頂部一塊區域是一部分內容,然后下面是一個title條,這個title條下面是一個列表,因為列表的數據可能有很多,所以這個頁面是需要整體進行滑動的,因為只讓下面的listview滾動的話,那么下面的展示區域就太小了,因為我們的listview的Item內容也比較多,但是說如果是scrollview嵌套listview,那么那個title條也會被滾動出屏幕,但是我們的那個title條里面還有觸發下面listview刪除、修改的功能,所以不能滾動出屏幕,需要有一個吸頂的效果。
??考慮過用stickylistheaderslistview,但是未免太麻煩了,所以我們自然而然的選擇了Material Design中很有滾動效果的CoordinatorLayout了,它也很擅長做這類滾動至屏幕頂端然后停止滾動的事情。接下來就跟以前似得開始寫代碼了,xml布局如下:

<android.support.design.widget.CoordinatorLayout  
    android:overScrollMode="never"  
    android:layout_alignParentTop="true"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent">  
  
    <android.support.design.widget.AppBarLayout  
        android:overScrollMode="never"  
        app:elevation = "0dp"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content">  
  
        <android.support.design.widget.CollapsingToolbarLayout  
            android:id="@+id/collapsingToolbarLayout"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:overScrollMode="never"  
            app:layout_scrollFlags="scroll|exitUntilCollapsed">  
  
         <LinearLayout  
            android:id="@+id/firstLl"  
            android:orientation="vertical"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content">  
  
            <TextView  
                android:layout_width="match_parent"  
                android:layout_height="49dip"  
                android:background="@color/color_ffffff"  
                android:drawableLeft="@drawable/user_details_icon_basic"  
                android:drawablePadding="5dip"  
                android:gravity="center_vertical"  
                android:paddingLeft="16dip"  
                android:text="a信息"  
                android:textColor="@color/color_3399ff"  
                android:textSize="15sp"/>  
  
            <View style="@style/view_line"/>  
  
            <RelativeLayout  
                android:layout_width="match_parent"  
                android:layout_height="wrap_content"  
                android:background="@color/color_ffffff">  
  
                <TextView  
                    style="@style/style_basicinfo"  
                    android:layout_alignParentLeft="true"  
                    android:text="1字段"/>  
  
                <TextView  
                    style="@style/style_basicinfo"  
                    android:layout_alignParentRight="true"/>  
  
            </RelativeLayout>  
  
            <RelativeLayout  
                android:layout_width="match_parent"  
                android:layout_height="wrap_content"  
                android:background="@color/color_ffffff">  
  
                <TextView  
                    style="@style/style_basicinfo"  
                    android:layout_alignParentLeft="true"  
                    android:text="2字段"/>  
  
                <TextView  
                    style="@style/style_basicinfo"  
                    android:textColor="@color/color_3399ff"  
                    android:layout_alignParentRight="true"/>  
  
            </RelativeLayout>  
  
            <RelativeLayout  
                android:layout_width="match_parent"  
                android:layout_height="wrap_content"  
                android:background="@color/color_ffffff">  
  
                <TextView  
                    style="@style/style_basicinfo"  
                    android:layout_alignParentLeft="true"  
                    android:text="3字段"/>  
  
                <TextView  
                    style="@style/style_basicinfo"  
                    android:layout_alignParentRight="true"/>  
  
            </RelativeLayout>  
  
            <LinearLayout  
                android:paddingTop="15dip"  
                android:background="@color/color_ffffff"  
                android:layout_width="match_parent"  
                android:layout_height="wrap_content">  
                <View  
                    style="@style/view_line"/>  
            </LinearLayout>  
  
            <View  
                android:background="@color/color_e5e5e5"  
                android:layout_width="match_parent"  
                android:layout_height="16dip"/>  
        </LinearLayout>  
    </android.support.design.widget.CollapsingToolbarLayout>  
  
</android.support.design.widget.AppBarLayout>  
  
<LinearLayout  
    app:layout_behavior="@string/appbar_scrolling_view_behavior"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical">  
  
    <RelativeLayout  
            android:id="@+id/secondRl"  
            android:background="@color/color_ffffff"  
            android:paddingRight="16dip"  
            android:layout_width="match_parent"  
            android:layout_height="49dip">  
  
            <TextView  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:layout_alignParentLeft="true"  
                android:drawableLeft="@drawable/user_details_icon_car"  
                android:drawablePadding="5dip"  
                android:gravity="center_vertical"  
                android:layout_centerVertical="true"  
                android:paddingLeft="16dip"  
                android:text="b信息"  
                android:textColor="@color/color_3399ff"  
                android:textSize="15sp"/>  
  
            <ImageView  
                android:layout_alignParentRight="true"  
                android:layout_centerVertical="true"  
                android:src="@drawable/received_details_btn_add"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"/>  
  
            <ImageView  
                android:layout_centerVertical="true"  
                android:layout_toLeftOf="@+id/addCarIv"  
                android:layout_marginRight="15dip"  
                android:src="@drawable/received_details_btn_edit"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"/>  
  
            <ImageView  
                android:visibility="gone"  
                android:layout_alignParentRight="true"  
                android:layout_centerVertical="true"  
                android:src="@drawable/received_details_btn_cancel"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"/>  
  
        </RelativeLayout>  
  
        <View  
            style="@style/view_line"/>  
  
        <LinearLayout  
            android:id="@+id/addLl"  
            android:gravity="center"  
            android:orientation="vertical"  
            android:background="@color/color_ffffff"  
            android:layout_width="match_parent"  
            android:layout_height="match_parent">  
  
            <ImageView  
                android:src="@drawable/received_icon_details_empty"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"/>  
  
            <TextView  
                android:textSize="15sp"  
                android:text="此處有點空"  
                android:layout_marginTop="15dip"  
                android:textColor="@color/color_333333"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"/>  
  
            <TextView  
                android:textSize="18sp"  
                android:text="快來添加吧"  
                android:layout_marginTop="10dip"  
                android:textColor="@color/color_3399ff"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"/>  
  
        </LinearLayout>  
  
        <android.support.v7.widget.RecyclerView  
            android:id="@+id/carlistview"  
            android:overScrollMode="never"  
            android:background="@color/color_ffffff"  
            android:divider="@drawable/developcar_shape_divider"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"/>  
    </LinearLayout>  
</android.support.design.widget.CoordinatorLayout>

上面可以看到id為firstLl的LinearLayout就是我們最初說的那個頂部布局,而id為secondRl的RelativeLayout則是我們說的那個需要吸頂的title條了,用過CoordinatorLayout的同學都知道,如果哪部分需要滑動出屏幕,那么那部分就需要寫在CollapsingToolbarLayout布局中,而CollapsingToolbarLayout需要寫在AppBarLayout中,同時為了能夠使這部分內容能夠滑動或者找到其在CoordinatorLayout中的位置,需要給這部分布局設置layout_scrollFlags屬性,一般都設置值為scroll|exitUntilCollapsed因為我們也不需要特殊的漸變之類的效果,只要能滑出屏幕就好了,然后呢,需要滑動到頂部然后吸頂的布局我們需要設置layout_behavior屬性,它告訴了CoordinatorLayout自己在滑動時候執行什么行為,為了制造吸頂需要設置其值為@string/appbar_scrolling_view_behavior就好了,然后運行一看貌似一切都很美好。
??其實我上面的布局還有一個id為addLl的LinearLayout,它是干嘛的呢?大家都知道列表沒有數據的時候,總要給用戶一些提示吧,它就是那個提示,其實里面就是一些文字以及圖片了,但是是居中展示的,不過發現一個問題,就是當列表為空這個布局展示的時候,里面的內容并沒有完全居中,只是水平方向上居中了,垂直方向上是在屏幕底部的,這是為啥呢?其實就是一個簡單的布局,但是它是被放在CoordinatorLayout中的,后來經過多次調試,發現是layout_scrollFlags的scroll值搗的鬼,如果不設置這個scroll值,那么下面是可以居中的,但是頂部不能滑動了,如果設置的話,頂部是能夠滑動了,但是下面不能居中了。所以最終的解決方式是動態設置這個layout_scrollFlags屬性了,實例代碼如下:

//因為在CoordinatorLayout中如果給CollapsingToolbarLayout設置的ScrollFlags有scroll,那么下面設置layout_behavior的布局就無法垂直居中  
//但是不設置scroll屬性,那么上面的有無法滑動然后吸頂。所以只能夠動態設置了  
private void setCollapsingToolbarLayoutFlag(@AppBarLayout.LayoutParams.ScrollFlags int flags){  
    AppBarLayout.LayoutParams layoutParams = (AppBarLayout.LayoutParams) binding.collapsingToolbarLayout.getLayoutParams();  
    layoutParams.setScrollFlags(flags);  
    binding.collapsingToolbarLayout.setLayoutParams(layoutParams);  

上面的注釋寫的也很清楚,分別在下面的recyclerview有無數據時候動態調用這個setCollapsingToolbarLayoutFlag方法來動態設置了。這樣子問題就算解決了。但是為啥不能居中還是沒太搞明白,有知道的朋友還請多多指教。另外做的時候還發現一個問題,就是AppBarLayout會出現陰影,這個是android5.0之后material design自帶的,但是在某些手機上不好看,我們就想要去掉,是要設置elevation屬性,但是一定是app:elevation否則會無效哦,因為對于AppBarLayout這個算是自定義屬性。
?? 好的,以上就是本次的全部內容,有問題歡迎批評指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容