亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

CoordinatorLayout使用全解析

2019-11-08 00:30:58
字體:
來源:轉載
供稿:網友

CoordinatorLayout是在 Google IO/15 大會發布的,遵循Material 風格,包含在 support Library中,結合AppbarLayout, CollapsingToolbarLayout等 可 產生各種炫酷的效果,本篇博客就將介紹CoordinatorLayout的各種酷炫效果。

其實在Android Studio中就給我們提供了很好的學習CoordinatorLayout的例子,我們在創建Activity的時候,有一個Activity模板叫Scrolling Activity,我們在創建Activity的時候選擇此模板,然后就會出現如下的效果 這里寫圖片描述

相關代碼

<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.example.coordinatorlayoutdemo.ScrollingActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height" android:fitsSystemWindows="true" android:theme="@style/A這是上面布局引用的NestedScrollView

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.coordinatorlayoutdemo.ScrollingActivity" tools:showIn="@layout/activity_scrolling"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/text_margin" android:text="@string/large_text" /></android.support.v4.widget.NestedScrollView>

可以發現在官方提供的例子中,出現了許多的控件,這些控件都和CoordinatorLayout配合出各種效果,接下來我們就先簡單介紹一下這些控件。

CoordinatorLayout

又名協調者布局,它是support.design包中的控件,所以使用的時候要導入compile ‘com.android.support:design:23.3.0’包。簡單來說,CoordinatorLayout是用來協調其子view并以觸摸影響布局的形式產生動畫效果的一個super-powered FrameLayout,其典型的子View包括:FloatingActionButton,SnackBar。注意:CoordinatorLayout是一個頂級父View。

AppBarLayout

AppBarLayout是LinearLayout的子類,必須在它的子view上設置app:layout_scrollFlags屬性或者是在代碼中調用setScrollFlags()設置這個屬性。

AppBarLayout的子布局有5種滾動標識(上面代碼CollapsingToolbarLayout中配置的app:layout_scrollFlags屬性):

scroll:所有想滾動出屏幕的view都需要設置這個flag, 沒有設置這個flag的view將被固定在屏幕頂部。 enterAlways:這個flag讓任意向下的滾動都會導致該view變為可見,啟用快速“返回模式”。 enterAlwaysCollapsed:假設你定義了一個最小高度(minHeight)同時enterAlways也定義了,那么view將在到達這個最小高度的時候開始顯示,并且從這個時候開始慢慢展開,當滾動到頂部的時候展開完。 exitUntilCollapsed:當你定義了一個minHeight,此布局將在滾動到達這個最小高度的時候折疊。 snap:當一個滾動事件結束,如果視圖是部分可見的,那么它將被滾動到收縮或展開。例如,如果視圖只有底部25%顯示,它將折疊。相反,如果它的底部75%可見,那么它將完全展開。

CollapsingToolbarLayout

CollapsingToolbarLayout作用是提供了一個可以折疊的Toolbar,它繼承自FrameLayout,給它設置layout_scrollFlags,它可以控制包含在CollapsingToolbarLayout中的控件(如:ImageView、Toolbar)在響應layout_behavior事件時作出相應的scrollFlags滾動事件(移除屏幕或固定在屏幕頂端)。CollapsingToolbarLayout可以通過app:contentScrim設置折疊時工具欄布局的顏色,通過app:statusBarScrim設置折疊時狀態欄的顏色。默認contentScrim是colorPrimary的色值,statusBarScrim是colorPrimaryDark的色值。

CollapsingToolbarLayout的子布局有3種折疊模式(Toolbar中設置的app:layout_collapseMode)

off:默認屬性,布局將正常顯示,無折疊行為。 pin:CollapsingToolbarLayout折疊后,此布局將固定在頂部。 parallax:CollapsingToolbarLayout折疊時,此布局也會有視差折疊效果。 當CollapsingToolbarLayout的子布局設置了parallax模式時,我們還可以通過app:layout_collapseParallaxMultiplier設置視差滾動因子,值為:0~1。

NestedScrollView

在新版的support-v4兼容包里面有一個NestedScrollView控件,這個控件其實和普通的ScrollView并沒有多大的區別,這個控件其實是Meterial Design中設計的一個控件,目的是跟MD中的其他控件兼容。應該說在MD中,RecyclerView代替了ListView,而NestedScrollView代替了ScrollView,他們兩個都可以用來跟ToolBar交互,實現上拉下滑中ToolBar的變化。在NestedScrollView的名字中其實就可以看出他的作用了,Nested是嵌套的意思,而ToolBar基本需要嵌套使用。

FloatingActionButton

FloatingActionButton就是一個漂亮的按鈕,其本質是一個ImageVeiw。有一點要注意,Meterial Design引入了Z軸的概念,就是所有的view都有了高度,他們一層一層貼在手機屏幕上,而FloatingActionButton的Z軸高度最高,它貼在所有view的最上面,沒有view能覆蓋它。

Behavior

Behavior只有是CoordinatorLayout的直接子View才有意義。只要將Behavior綁定到CoordinatorLayout的直接子元素上,就能對觸摸事件(touch events)、window insets、measurement、layout以及嵌套滾動(nested scrolling)等動作進行攔截。Design Library的大多功能都是借助Behavior的大量運用來實現的。當然,Behavior無法獨立完成工作,必須與實際調用的CoordinatorLayout子視圖相綁定。具體有三種方式:通過代碼綁定、在XML中綁定或者通過注釋實現自動綁定。上面NestedScrollView中app:layout_behavior=”@string/appbar_scrolling_view_behavior”的Behavior是系統默認的,我們也可以根據自己的需求來自定義Behavior。

CoordinatorLayout各種特效

接下來是介紹CoordinatorLayout常用的一些效果

CoordinatorLayout實現浮動操作按鈕效果

效果如下: 這里寫圖片描述 只要使用CoordinatorLayout作為基本布局,將自動產生向上移動的動畫。浮動操作按鈕有一個 默認的 behavior來檢測Snackbar的添加并讓按鈕在Snackbar之上呈現上移與Snackbar等高的動畫。

<android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" 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.v7.widget.RecyclerView android:id="@+id/rvToDoList" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="16dp" android:src="@mipmap/ic_launcher" app:layout_anchor="@id/rvToDoList" app:layout_anchorGravity="bottom|right|end"/> </android.support.design.widget.CoordinatorLayout>

Toolbar的擴展與收縮效果 這里寫圖片描述

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /></android.support.design.widget.CoordinatorLayout>

響應滾動事件 這里寫圖片描述

首先,需要讓Toolbar包裹在AppBarLayout中

<android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="@dimen/detail_backdrop_height" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.AppBarLayout>

然后,我們需要定義AppBarLayout與滾動視圖之間的聯系。在RecyclerView或者任意支持嵌套滾動的view比如NestedScrollView上添加app:layout_behavior。support library包含了一個特殊的字符串資源@string/appbar_scrolling_view_behavior,它和AppBarLayout.ScrollingViewBehavior相匹配,用來通知AppBarLayout 這個特殊的view何時發生了滾動事件,這個behavior需要設置在觸發事件(滾動)的view之上。

<android.support.v7.widget.RecyclerView android:id="@+id/rvToDoList" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior">

當CoordinatorLayout發現RecyclerView中定義了這個屬性,它會搜索自己所包含的其他view,看看是否有view與這個behavior相關聯。AppBarLayout.ScrollingViewBehavior描述了RecyclerView與AppBarLayout之間的依賴關系。RecyclerView的任意滾動事件都將觸發AppBarLayout或者AppBarLayout里面view的改變。

AppBarLayout里面定義的view只要設置了app:layout_scrollFlags屬性,就可以在RecyclerView滾動事件發生的時候被觸發:

<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout>

app:layout_scrollFlags屬性里面必須至少啟用scroll這個flag,這樣這個view才會滾動出屏幕,否則它將一直固定在頂部??梢允褂玫钠渌鹒lag有:

enterAlways: 一旦向上滾動這個view就可見。 enterAlwaysCollapsed: 顧名思義,這個flag定義的是何時進入(已經消失之后何時再次顯示)。假設你定義了一個最小高度(minHeight)同時enterAlways也定義了,那么view將在到達這個最小高度的時候開始顯示,并且從這個時候開始慢慢展開,當滾動到頂部的時候展開完。 exitUntilCollapsed: 同樣顧名思義,這個flag時定義何時退出,當你定義了一個minHeight,這個view將在滾動到達這個最小高度的時候消失。 記住,要把帶有scroll flag的view放在前面,這樣收回的view才能讓正常退出,而固定的view繼續留在頂部。

折疊效果 這里寫圖片描述 如果想制造toolbar的折疊效果,我們必須把Toolbar放在CollapsingToolbarLayout中:

<android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways"></android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout>

通常,我們我們都是設置Toolbar的title,而現在,我們需要把title設置在CollapsingToolBarLayout上,而不是Toolbar。

CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); collapsingToolbar.setTitle("Title");

視差效果

這里寫圖片描述

為了制造出這種效果,我們添加一個定義了app:layout_collapseMode=”parallax” 屬性的ImageView。

<android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways"></android.support.v7.widget.Toolbar> <ImageView android:src="@drawable/cheese_1" app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="centerCrop" app:layout_collapseMode="parallax" android:minHeight="100dp"/> </android.support.design.widget.CollapsingToolbarLayout>

結合ViewPager

<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:background="@android:color/background_light" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/main.appbar" android:layout_width="match_parent" android:layout_height="300dp" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" > <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/main.collapsing" android:layout_width="match_parent" android:layout_height="250dp" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed" > <ImageView android:id="@+id/main.backdrop" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:scaleType="centerCrop" android:src="@drawable/tangyan" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="?attr/colorPrimary" app:tabIndicatorColor="@color/colorAccent" app:tabIndicatorHeight="4dp" app:tabSelectedTextColor="#000" app:tabTextColor="#fff"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </android.support.v4.view.ViewPager> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="15dp" android:src="@drawable/add_2"/></android.support.design.widget.CoordinatorLayout>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性黄网官网| 91久久综合亚洲鲁鲁五月天| 国产精品国产亚洲伊人久久| 国内精品久久久久影院 日本资源| 久久亚洲精品网站| 欧美福利视频在线观看| 91精品国产91久久久久久吃药| 国产精品一区二区女厕厕| 免费99精品国产自在在线| 亚洲精品国产精品自产a区红杏吧| 亚洲第一精品久久忘忧草社区| 久久久成人精品视频| 欧美精品久久久久久久久| 日韩男女性生活视频| 欧美亚洲日本网站| 亚洲天堂一区二区三区| 国产伦精品一区二区三区精品视频| 国产精品自拍偷拍视频| 亚洲激情在线视频| 国产亚洲精品va在线观看| 亚洲图片在线综合| 福利二区91精品bt7086| 国产在线999| 日韩精品中文字幕在线观看| 亚洲午夜女主播在线直播| 国产亚洲精品久久久久久| 欧美精品在线极品| 色噜噜久久综合伊人一本| 国产成人av网| 精品欧美国产一区二区三区| 亚洲女人初尝黑人巨大| 欧洲成人免费视频| 欧美成人免费视频| 久久国产精品视频| 色综合久久中文字幕综合网小说| 91精品国产精品| 久久综合亚洲社区| 久久久久久中文| 日韩av在线电影网| 欧美激情精品久久久久久| 国产成人精品久久二区二区| 国产va免费精品高清在线观看| 欧美精品生活片| 日韩在线视频线视频免费网站| 国产91成人video| 久久国产精品视频| 亚洲国产欧美一区二区三区久久| 国产精品专区h在线观看| 欧洲精品久久久| 久久久久久久久电影| 精品久久久久久久大神国产| 一区二区av在线| 亚洲国产精品字幕| 久久精品国产2020观看福利| 国产在线观看精品一区二区三区| 欧美影院成年免费版| 欧美极品美女视频网站在线观看免费| 国产精品美女久久久久av超清| 成人欧美一区二区三区在线| 2018中文字幕一区二区三区| 超碰91人人草人人干| 国产精品丝袜视频| 一区二区国产精品视频| 国产一区二区三区丝袜| 精品久久久久久久久久久久久久| 亚洲综合视频1区| 91成人性视频| 91精品久久久久久久久青青| 一区二区三区视频免费在线观看| 国产成人a亚洲精品| 国产精品va在线播放| 亚洲综合一区二区不卡| 亚洲第一页中文字幕| 欧美亚洲国产视频小说| 国产精品免费一区二区三区都可以| 欧美华人在线视频| 在线a欧美视频| 亚洲天堂影视av| 亚洲第一av在线| 国产午夜精品美女视频明星a级| 久久免费视频在线观看| 2020欧美日韩在线视频| 亚洲最大福利视频| 国产精品91一区| 国产视频精品免费播放| 国产精品久久久久久久久久久新郎| 日韩av在线最新| 日韩av电影手机在线观看| 久久久女人电视剧免费播放下载| 久久亚洲精品一区二区| 欧美日韩福利电影| 在线免费观看羞羞视频一区二区| 欧美一级淫片videoshd| 亚洲一区二区三区在线免费观看| 欧美风情在线观看| 国产综合在线观看视频| 国产日韩在线亚洲字幕中文| 亚洲日本成人网| 国产精品久久久久999| 久久久久亚洲精品国产| 亚洲精品国产综合久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美黑人巨大精品一区二区| 欧美一级淫片videoshd| 精品国产拍在线观看| 久久男人av资源网站| 久久伊人精品视频| 欧美亚州一区二区三区| 亚洲欧洲一区二区三区久久| 国产精品久久久久久久一区探花| 亚洲欧美三级伦理| 国产一区二区香蕉| 青青草国产精品一区二区| 成人a免费视频| 伊人久久大香线蕉av一区二区| 91国内免费在线视频| 亚洲国产一区二区三区四区| 国产精品久久久精品| 国产精品午夜一区二区欲梦| 亚洲成人av在线播放| 欧美理论在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲男人天堂网| 成人午夜在线视频一区| 亚洲缚视频在线观看| 亚洲精品美女在线| 亚洲福利视频免费观看| 国产一区二区三区免费视频| 久久成人国产精品| 欧美黄网免费在线观看| 欧美日韩一区二区在线| 久久久国产精品免费| 精品动漫一区二区| 久久久亚洲精选| 精品久久久一区二区| 久久久成人的性感天堂| 国产91精品高潮白浆喷水| 96sao精品视频在线观看| 亚洲国产精品久久精品怡红院| 久热爱精品视频线路一| 日韩中文字幕亚洲| 日av在线播放中文不卡| 久久五月天综合| 国产日本欧美一区二区三区在线| 91高清视频在线免费观看| 久久久精品国产网站| 国产精品视频地址| 亚洲欧美在线磁力| 精品中文字幕在线观看| 欧美成aaa人片在线观看蜜臀| 中文字幕亚洲欧美一区二区三区| 热99精品只有里视频精品| 伊人久久大香线蕉av一区二区| 91色p视频在线| 亚洲有声小说3d| 国产伦精品一区二区三区精品视频| 青青青国产精品一区二区| 国内精品久久久久久影视8| 日韩欧美国产骚| 久久精品99久久香蕉国产色戒| 精品成人久久av| 成人www视频在线观看| 亚洲视频在线观看网站| 亚洲天堂av在线播放|