Android學習筆記:Material Design

Material Design於2014年的Google I/O 大會上推出,是由谷歌的設計工程師們基於傳統優秀的設計原則,結合豐富的創意和科學技術所發明的一套全新的界面設計語言。在2015年的Google I/O 大會上推出了一個Design Support庫,這個庫將Material Design中最具代表性的一些控件和效果進行了封裝,使得開發者在即使不瞭解Material Design的情況下也能非常輕鬆的將自己的應用Material化。

(1)CardView(卡片佈局)
(2)Toolbar(標題欄)
(3)DrawerLayout(滑動菜單)
(4)NavigationView(滑動菜單界面)
(5)FloatingActionButton(懸浮按鈕)
(6)Snackbar(提示工具)
(7)CoordinatorLayout(佈局)
(8)AppBarLayout
(9)SwipeRefershLayout(下拉刷新)
(10)CollapsingToolbarLayout(可摺疊標題欄)


一、CardView(卡片式佈局)

Android 5.0 版本新增加了CardView,CardView繼承自FrameLayout類,並且可以設置圓角和陰影,使得控件具有立體性,也可以包含其他的佈局容器和控件,CardView是用於實現卡片式佈局效果的重要控件。

	android.support.v7.widget.CardView

CardView具有如下幾個重要屬性:

  • card_view:cardCornerRadius,設置圓角的半徑。
  • card_view:cardElevation,設置陰影的半徑。
  • CardView_cardBackgroundColor,設置背景色。
  • CardView_cardElevation,設置Z軸陰影。
  • CardView_cardMaxElevation,設置Z軸最大高度值。
  • CardView_cardUseCompatPadding,是否使用CompadPadding。
  • CardView_cardPreventCornerOverlap,是否使用PreventCornerOverlap。
  • CardView_contentPadding,內容的padding。
  • CardView_contentPaddingLeft,內容的左padding。
  • CardView_contentPaddingTop,內容的上padding。
  • CardView_contentPaddingRight,內容的右padding。
  • CardView_contentPaddingBottom,內容的下padding。

CardViewDemo代碼地址——Github地址:https://github.com/ambition-hb/CardViewDemo

項目示例圖如下:
在這裏插入圖片描述


二、Toolbar(標題欄)

由於ActionBar設計的原因,被限定只能位於活動的頂部,從而不能實現一些Material Design的效果,因此官方已經不建議使用ActionBar了。而ToolBar的強大之處在於不僅繼承了ActionBar的所有功能,而且靈活性很高,可以隨處放置,可以配合其他控件來完成一些Material Design的效果。

 	android.support.v7.widget.Toolbar

我們可以添加有一些Action按鈕來讓Toolbar豐富一些,首先將圖片資源放置到drawable中,然後右擊res目錄→New→Directory,創建一個menu文件夾。然後右擊menu文件夾→New→Menu resource file,創建一個toolbar.xml文件。我們通過< item >標籤來定義action按鈕,android:id用於指定按鈕的id,android:icon用於指定按鈕的圖標,android:title用於指定按鈕的文字。接着使用app:showAsAction來指定按鈕的顯示位置,showAction主要有以下幾種值可選:①always表示永遠顯示在toolbar中,如果屏幕空間不夠則不顯式;②ifRoom表示屏幕控件足夠的情況下顯示在Toolbar中,不夠的話就顯示在菜單中;③never表示永遠顯示在菜單中。(注意:Toolbar中的action按鈕只會顯示圖標,菜單中的action按鈕只會顯示文字。)

ToolbarDemo代碼地址——Github地址:https://github.com/ambition-hb/ToolbarDemo

項目示例圖如下:
在這裏插入圖片描述


三、DrawerLayout(滑動菜單)

滑動菜單就是將一些菜單選項隱藏起來,而不是放置在主屏幕上,然後可以通過滑動的方式將菜單顯示出來。這種方式既節省了屏幕空間,又實現了非常好的動畫效果。Google提供了DrawerLayout控件來實現這個功能。

DrawerLayout是一個佈局,在佈局中允許放入兩個直接子控件,第一個子控件是主屏幕中顯示的內容,第二個子控件是滑動菜單中顯示的內容。在第二個子控件中,layout_gravity這個屬性是必須指定的,因爲我們需要告訴DrawerLayout滑動菜單在屏幕的左邊還是右邊,指定left表示滑動菜單在左邊,指定right表示滑動菜單在右邊。而指定start表示會根據系統語言進行判斷,如果系統語言是從左往右,比如英語、漢語,滑動菜單就在左邊,如果系統語言是從右往左,比如阿拉伯語,滑動菜單就在右邊。

Materail Design建議的做法是在Toolbar的最左邊加入一個導航按鈕,點擊了按鈕也會將滑動菜單的內容展示出來。這樣就相當於給用戶提供了兩種打開滑動菜單的方式,防止一些用戶不知道屏幕左側是可以拖動的。

 	android.support.v4.widget.DrawerLayout

DrawerLayoutDemo代碼地址——Github地址:https://github.com/ambition-hb/DrawerLayoutDemo

項目示例圖如下:
在這裏插入圖片描述


四、NavigationView(滑動菜單界面)

NavigationView是Design Support庫中提供的一個控件,它不僅是嚴格按照Material Design的要求來設計的,而且還可以將滑動菜單頁面的實現變得非常簡單。

	android.support.design.widget.NavigationView

NavigationViewDemo代碼地址——Github地址:https://github.com/ambition-hb/NavigationViewDemo

項目示例圖如下:
在這裏插入圖片描述


五、FloatingActionButton(懸浮按鈕)

FloatingActionButton是Design Support庫中提供的一個控件,這個控件可以幫助我們輕鬆的實現懸浮按鈕的效果,它默認會使用colorAccent來作爲按鈕的顏色,還可以通過給按鈕指定一個圖標來表明這個按鈕的作用是什麼。

 	android.support.design.widget.FloatingActionButton

通過app:elevation屬性來給FloatingActionButton設定一個高度值(懸浮高度),高度值越大,投影的範圍也越大,但是投影效果越淡,高度值越小,但是投影效果越濃。

FloatingActionButtonDemo代碼地址——Github地址:https://github.com/ambition-hb/FloatingActionButtonDemo

項目示例圖如下:
在這裏插入圖片描述


六、Snackbar(提示工具)

Snackbar並不是Toast的替代品,它們兩者之間有着不同的應用場景。Toast的作用是告訴用戶現在發生了什麼,用戶只能被動的接收這個事情,因爲沒有什麼辦法能讓用戶進行選擇。而Scackbar則在這方面進行了擴展,它允許在提示當中加入一個可交互按鈕,當用戶點擊按鈕的時候可以執行一些額外的邏輯操作。

可以調用Snackbar的make()方法來創建一個Snackbar對象,make()方法的第一個參數需要傳入一個view,只要是當前界面佈局的任意一個view都可以,Snackbar會使用這個View來自動查找最外層的佈局,用於展示Snackbar。第二個參數就是Snackbar中顯示的內容,第三個參數是Snackbar顯示的時長(與Toast類似)。

可以調用setAction()方法來設置Snackbar的動作,從而讓Snackbar可以和用戶進行交互。

SnackbarDemo代碼地址——Github地址:https://github.com/ambition-hb/SnackbarDemo

項目示例圖如下:
在這裏插入圖片描述


七、CoordinatorLayout(佈局)

CoordinatorLayout是一個加強版的FrameLayout,在普通情況下的作用和FrameLayout基本一致,但是,CoordinatorLayout可以監聽其所有子控件的各種事情,然後自動幫助我們做出最爲合理的響應。比如:如果出現控件相互遮擋,CoordinatorLayout會幫助我們自動調整。


八、AppBarLayout

AppBarLayout實際上是一個垂直方向上的LinearLayout,他在內部做了很多滾動事件的封裝,可以有效的解決控件遮擋問題(比如:RecyclerView遮擋Toolbar的問題)。

使用AppBarLayout的前提是它的根佈局必須是CoordinatorLayout。換句話說,AppBarLayout必須是CoordinatorLayout的子佈局。

當AppBarLayout接收到滾動事件的時候,它內部的子控件其實是可以指定如何去影響這些事件的,通過app:layout_scrollFlags屬性就能實現。比如,我們在AppBarLayout中嵌套Toolbar,在Toolbar中添加一個app:layout_scrollFlags屬性,並將屬性的值指定爲scroll|enterAlways|snap,其中,①scroll表示當RecyclerView向上滾動的時候,Toolbar會跟着一起向上滾動並實現隱藏;②enterAlways表示RecyclerView向下滾動的時候,Toolbar會跟着一起向下滾動並重新顯示;③snap表示Toolbar還沒有完全隱藏或顯示的時候,會根據當前滾動的距離,自動選擇是隱藏還是顯示。此外,還有其他屬性:④enterAlwaysCollapsed是對enterAlways的補充,當Scrolling View 向下滑動的時候,滑動View(也就是設置了enterAlwaysCollapsed 的View)下滑至摺疊的高度,當Scrolling View 到達滑動範圍的結束值的時候,滑動View剩下的部分開始滑動。這個摺疊的高度是通過View的minimum height (最小高度)指定的。(要配合scroll|enterAlways 一起使用);⑤exitUntilCollapsed表示當Scrolling View 滑出屏幕時(也就是向上滑動時),滑動View先響應滑動事件,滑動至摺疊高度,也就是通過minimum height 設置的最小高度後,就固定不動了,再把滑動事件交給 Scrolling view 繼續滑動。

 	android.support.design.widget.AppBarLayout

AppBarLayoutDemo代碼地址——Github地址:https://github.com/ambition-hb/AppBarLayoutDemo

項目示例圖如下:
在這裏插入圖片描述


九、SwipeRefershLayout(下拉刷新)

SwipeRefershLayout是用於實現下拉刷新功能的核心類,是由support-v4庫提供的。我們把想要實現下拉刷新功能的控件放置到SwipeRefershLayout中,就可以迅速讓這個控件支持下拉刷新。

 	android.support.v4.widget.SwipeRefershLayout

SwipeRefershLayoutDemo代碼地址——Github地址:https://github.com/ambition-hb/SwipeRefershLayoutDemo

項目示例圖如下:
在這裏插入圖片描述


十、CollapsingToolbarLayout(可摺疊標題欄)

CollapsingToolbarLayout可以讓Toolbar的效果變得更加豐富,CollapsingToolbarLayout是不能獨立存在的,它在設計的時候就被限定只能作爲AppBarLayout的直接子佈局來使用。而AppBarLayout又必須是CoordinatorLayout的子佈局。

在佈局CollapsingToolbarLayout中,除了id、layout_width、layout_height這幾個屬性外,還引入了(1)android:theme屬性來指定一個主題;(2)app:contentScrim屬性來指定CollapsingToolbarLayout在趨於摺疊狀態以及摺疊之後的背景色,CollapsingToolbarLayout在摺疊之後就是一個普通的Toolbar;(3)app:layout_scrollFlags屬性來設置滑動的效果,其中,①scroll表示當RecyclerView向上滾動的時候,Toolbar會跟着一起向上滾動並實現隱藏;②enterAlways表示RecyclerView向下滾動的時候,Toolbar會跟着一起向下滾動並重新顯示;③snap表示Toolbar還沒有完全隱藏或顯示的時候,會根據當前滾動的距離,自動選擇是隱藏還是顯示。此外,還有其他屬性:④enterAlwaysCollapsed是對enterAlways的補充,當Scrolling View 向下滑動的時候,滑動View(也就是設置了enterAlwaysCollapsed 的View)下滑至摺疊的高度,當Scrolling View 到達滑動範圍的結束值的時候,滑動View剩下的部分開始滑動。這個摺疊的高度是通過View的minimum height (最小高度)指定的。(要配合scroll|enterAlways 一起使用);⑤exitUntilCollapsed表示當Scrolling View 滑出屏幕時(也就是向上滑動時),滑動View先響應滑動事件,滑動至摺疊高度,也就是通過minimum height 設置的最小高度後,就固定不動了,再把滑動事件交給 Scrolling view 繼續滑動。

我們在CollapsingToolbarLayout中定義了一個ImageView和一個Toolbar,表示這個標題欄是由普通的標題欄加上圖片組合而成的。在其中設置app:layout_collapseMode屬性來指定當前控件在CollapsingToolbarLayout摺疊過程中的摺疊模式,有兩種固定的模式:①pin,表示在摺疊的過程中位置始終保持不變;②parallax,表示會在摺疊的過程中產生一定的錯位偏移。

 	android.support.design.widget.CollapsingToolbarLayout

CollapsingToolbarLayoutDemo代碼地址——Github地址:https://github.com/ambition-hb/CollapsingToolbarLayoutDemo

項目示例圖如下:
在這裏插入圖片描述


十一、未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章