Android Design Support Library使用詳解

作者簡介 原創(chuàng)微信公眾號郭霖 WeChat ID: guolin_blog

本篇來自Single Shu888的投稿,展示了Material Design常用控件的用法,進階部分基本都推薦了相關博文九妈。文章篇幅不短泰演,感興趣的話要花點時間閱讀了。

Single Shu888的博客地址:

http://blog.csdn.net/sw5131899

前言

Material Design 設計風格非常受歡迎搁凸,那么支持其效果的 Design Support Library(Android?2.1 ?API ?level 7及其以上)庫又有哪些控件呢媚值。主要包括SnackBarNavigation View护糖、FloatActionbutton褥芒、CoordinatorLayoutCollapsingToolBarLayout等嫡良。我在Git上看見一個非常炫的效果:


把該項目的Git附上锰扶,覺得有用的自行下載看源碼:

https://github.com/frogermcs/InstaMaterial

現(xiàn)在來一一介紹Design系列控件。

SnackBar

SnackBar 是帶有動畫效果的快速提示欄寝受,它顯示在屏幕底部坷牛,是用來代替 Toast 的一個全新控件,它基本上繼承了 Toast 的屬性和方法很澄,用戶可以點擊按鈕執(zhí)行對應的操作京闰,Snackbar 支持滑動消失,如果沒設任何操作甩苛,那么到時間自動消失蹂楣。

SnackBar 的構(gòu)造:

SnackBar 的常用方法:

Snackbar 需要一個控件容器view用來容納,官方推薦使用 CoordinatorLayout 來確保 Snackbar 和其他組件的交互讯蒲,比如滑動取消 Snackbar痊土、Snackbar 出現(xiàn)時 FloatingActionButton 上移。舉一個簡單運用的例子:

這些運用都很簡單爱葵,就不更多的嚼舌根了施戴。有個花式使用SnackBar的連接,感興趣的可以去看看:

http://www.reibang.com/p/cd1e80e64311

TextInputLayout

TextInputLayout 主要作用是作為 EditText 的容器萌丈,從而為 EditText 默認生成一個浮動的 label赞哗,當用戶點擊了 EditText 之后,EditText 中設置的 Hint 字符串會自動移到 EditText 的左上角辆雾,使用非常簡單肪笋。這有個例子寫的不錯:

http://www.jcodecraeer.com/a/basictutorial/2015/0821/3338.html

getEditText()得到控件中包含的 EditText 控件

setError(CharSequence error)設置錯誤信息并顯示在 EditText 下方 應用場景:比如用戶輸錯了密碼或者用戶名等

setHint(CharSequence hint)設置提示信息

setErrorEnabled(boolean enabled)設置?setError(CharSequence error)?這個函數(shù)是否可用 記住哦:這個函數(shù)一定要在?setError(CharSequence error)?這個函數(shù)之后執(zhí)行哦!

部分示例xml

部分示例代碼

效果圖

TabLayout

TabLayout 控件用于應用中輕松的添加Tab分組功能,總共有兩種類型可選藤乙。

1. 固定的Tabs:對應的xml配置中的app:tabMode="fixed"

2. 可滑動的Tabs:對應xml配置中的app:tabMode="scrollable"

TabLayout猜揪,它就可以完成 TabPageIndicator 的效果,而且還是官方的坛梁,最好的是它可以兼容到2.2以上版本而姐,包括2.2。接下來就簡單使用一下划咐。

xml關鍵部分

適配器

用過 ViewPager 套 Fragment 的猿友都知道拴念,就不啰嗦了。getPageTitle 是獲取需要顯示的 tab標題褐缠。新建一個 空的fragmentBlankFragment政鼠。

那么準備工作差不多了,開始進入主題队魏,基本的介紹都加了注釋:

tabLayout.setupWithViewPager(viewPager,true); 這句代碼是關聯(lián) viewpager 和 tabLayout公般。后面的true是是否自動刷新 fragment 的布爾值,看源碼就知道了胡桨。

我們調(diào)用的第一個函數(shù)官帘,實質(zhì)是調(diào)用的第二個函數(shù)。這里需要注意的是需要先調(diào)用 viewpager 的 setAdaper 之后才能把 tabLayout 和 viewpager 關聯(lián)起來昧谊。給個效果圖:

NavigationView

以前做側(cè)邊欄的有?SlideMenu?三方庫遏佣,這里不詳細介紹了,想要了解的給個鏈接:

http://blog.csdn.net/luck_apple/article/details/9207811

現(xiàn)在有了 NavigationView 官方提供的揽浙,當然都漸漸使用這個了状婶。官網(wǎng)地址也給出來,有空的可以去瞅瞅:

http://www.google.com/design/spec/patterns/navigation-drawer.html

使用導航視圖需要傳入一組參數(shù)馅巷,一個可選的頭部布局膛虫,以及一個用于構(gòu)建導航選項的菜單,完成這些步驟以后只需給導航選項添加響應事件的監(jiān)聽器就可以了钓猬。

在使用 NavigationView 時需要提前準備好兩個xml文件稍刀,一個是頭布局,一個是menu布局敞曹。menu的一些屬性值是干嘛的账月,我相信有的猿友不是很清楚、下面簡單介紹一下澳迫。

menu屬性值介紹

元素(ELEMENTS):

必須的局齿。它必須是根節(jié)點,其中要包含?橄登、?元素抓歼。

的屬性:

xmlns:android

它定義了XML的命名空間讥此,必須是:http://schemas.android.com/apk/res/android

元素(ELEMENTS):

它定義一個菜單項,可以包含一個?元素 作為子菜單谣妻。它必須是?萄喳、元素 的子元素。

的屬性:

android:id

定義資源ID蹋半,它是個唯一值他巨,使用“@+id/name”格式可以給這個菜單項創(chuàng)建一個新的資源ID,“+”號指示要創(chuàng)建一個新的ID减江。

android:title

字符串資源闻蛀,它用字符串資源或原始的字符串來定義菜單的標題。

android:titleCondensed

字符串資源您市。它用字符串資源或原始的字符串來定義一個簡要的標題,以便在普通的標題太長時來使用役衡。

android:icon

可繪制資源茵休,它定義了一個菜單項所要使用的圖標。

android:onClick

方法名手蝎。在這個菜單項被點擊時榕莺,會調(diào)用這個方法。在Activity中棵介,這個方法必須用public關鍵字來聲明钉鸯,并且只接受一個MenuItem對象,這個對象指明了被點擊的菜單項邮辽。這個方法會優(yōu)先標準的回調(diào)方法:onOptionsItemSelected()唠雕。

警告:如果要使用ProGuard(或類似的工具)來混淆代碼,就要確保不要重名這個屬性所指定的方法吨述,因為這樣能夠破壞功能岩睁。

這個屬性在API級別11中被引入。

android:showAsAction

關鍵詞揣云。它定義這個項目作為操作欄中的操作項的顯示時機和方式捕儒。只用Activity包含了一個ActionBar對象時,菜單項才能夠作為操作項來顯示邓夕。這個屬性在API級別11中被引入刘莹,有效值如下:

android:actionViewLayout

它引用一個布局資源,這個布局要用于操作窗口焚刚。更多的信息請參照“操作欄”開發(fā)指南:

http://blog.csdn.net/fireofstar/article/details/7358393

這個屬性在API級別11中被引入点弯。

android:actionViewClass

類名。它定義了操作窗口要使用的View對象的完整的類名矿咕。例如蒲拉,“android.widget.SearchView”說明操作窗口要使用的SearchView類肃拜。

警告:如果要使用ProGuard(或類似的工具)來混淆代碼,就要確保不要重名這個屬性所指定的方法雌团,因為這樣能夠破壞功能燃领。

這個屬性在API級別11中被引入。

android:actionProviderClass

類名锦援,它是操作項目所使用的ActionProvider類的完整的類名猛蔽。例如,“android.widget.ShareActionProvider”說明要使用ShareActionProvider類灵寺。

警告:如果要使用ProGuard(或類似的工具)來混淆代碼曼库,就要確保不要重名這個屬性所指定的方法,因為這樣能夠破壞功能略板。?這個屬性在API級別14中被引入毁枯。

android:alphabeticShortcut

字符,定義一個字符快捷鍵

android:numericShortcut

數(shù)字值叮称,定義一個數(shù)字快捷鍵

android:checkable

布爾值种玛,如果菜單項是可以復選的,那么就設置為true瓤檐。

android:checked

布爾值赂韵,如果復選菜單項默認是被選擇的,那么就設置為true挠蛉。

android:visible

布爾值祭示,如果菜單項默認是可見的,那么就設置為true谴古。

android:enabled

布爾值质涛,如果菜單項目默認是可用的,那么就設置為true掰担。

android:menuCategory

關鍵詞蹂窖。它的值對應了定義菜單項優(yōu)先級的CATEGORE_*常量,有效值如下:

android:orderInCategory

整數(shù)值恩敌,它定義菜單項在菜單組中的重要性的順序瞬测。

元素(ELEMENTS):

它定義了一個菜單組(它是一個具有共同特征的菜單項的組合,如菜單項的可見性纠炮、可用性或可復選性)月趟。它要包含多個元素,而且必須是元素的子元素恢口。

的屬性

android:id

資源ID孝宗。它是資源的唯一標識。使用“@+id/name”格式給菜單項創(chuàng)建一個新的資源ID耕肩∫蚋荆“+”號指示應該給這個元素創(chuàng)建一個新的資源ID问潭。

android:checkableBehavior

關鍵詞。針對菜單組的可復選行為的類型婚被。有效值如下:

android:visible

布爾值狡忙,如果菜單組是可見的,就設置為true址芯。

android:enabled

布爾值灾茁,如果菜單組是可用的,就設置為true谷炸。

android:menuCategory

關鍵詞北专。它的值對應了Menu類的CATEGORY_*常量,定義了菜單組的優(yōu)先級旬陡。有效值如下:

android:orderInCategory

整數(shù)值拓颓,它定義了分類中菜單項目的默認順序。

差不多就這些了描孟,在res文件夾下創(chuàng)建一個名為 menu 的文件夾存放 menu的xml文件驶睦。取名為 draw_view.xml:

在創(chuàng)建一個頭布局,命名為nav_header.xml:

好了画拾,成功了一半,那么現(xiàn)在需要在 主xml文件 中布局使用 navigationView菜职,最外層是需要DrawerLayout的青抛。

這里我使用了一下百分比布局,防止有的產(chǎn)品經(jīng)理有側(cè)滑欄占屏幕的百分之多少多少之類的要求:


一些詳細的介紹都寫在了注釋里酬核,若還是有什么不懂的蜜另,可以參考這篇博客(介紹得比較詳細):

http://blog.csdn.net/lamp_zy/article/details/50126531

FloatingActionButton

浮動操作按鈕實在 Material Design 準則中新引入的組件。用于強調(diào)當前屏幕最重要嫡意,高頻率的一些操作举瑰。

FloatingActionButton?正常顯示的情況下有個填充的顏色,有個陰影蔬螟;點擊的時候會有一個 rippleColor此迅,并且陰影的范圍可以增大,那么問題來了:

這個填充色以及rippleColor如何自定義呢旧巾?

默認填充顏色取的是 theme 中的 colorAccent耸序,所以你可以在 style 中定義 colorAccent。

colorAccent 對應 EditText編輯時鲁猩、RadioButton選中坎怪、CheckBox等選中時的顏色。詳細請參考:

http://blog.csdn.net/lmj623565791/article/details/45303349

rippleColor 默認取的是theme中的colorControlHighlight廓握。

我們也可以直接用屬性定義這兩個的顏色:

app:backgroundTint="#ff87ffeb"app:rippleColor="#33728dff"

立體感有沒有什么屬性可以動態(tài)指定搅窿?

和立體感相關有兩個屬性嘁酿,elevation 和 pressedTranslationZ,前者用戶設置正常顯示的陰影大心杏Α闹司;后者是點擊時顯示的陰影大小。大家可以自己設置嘗試下殉了。

在5.x的設備上運行开仰,你會發(fā)現(xiàn)一些問題(測試系統(tǒng)5.0):

木有陰影

記得設置 app:borderWidth="0dp"。

按上述設置后薪铜,陰影出現(xiàn)了众弓,但是竟然有矩形的邊界(未設置margin時,可以看出)

需要設置一個margin的值隔箍。在5.0之前谓娃,會默認就有一個外邊距(不過并非是margin,只是效果相同)蜒滩。

so滨达,良好的實踐是:

添加屬性app:borderWidth="0dp"

對于5.x設置一個合理的margin

寫一個簡單的使用例子:

由于沒辦法運行模擬器,就上個圖片吧俯艰,app:rippleColor 這個是點擊顏色捡遍,android:backgroundTint 這個是顯示背景顏色。會有一個漸變的過程竹握,可以試試画株。也可以參考鴻神的一篇介紹:

http://blog.csdn.net/lmj623565791/article/details/46678867

CoordinatorLayout

CoordinatorLayout 是 Design 引入的一個功能強大的布局,本質(zhì)上是一個 增強的FrameLayout,它可以使得不同組件之間直接相互作用啦辐,并協(xié)調(diào)動畫效果谓传。我們可以定義 CoordinatorLayout 內(nèi)部的視圖組件如何相互作用并發(fā)生變化。

例如剛才的 FloatingActionButton 和 SnackBar芹关,為了實現(xiàn) SnackBar 出現(xiàn)時FAB能夠上移续挟,我們可以使用 CoordinatorLayout 為父容器。

然后在代碼中侥衬,把 Coordinator 給 SnackBar:

Snackbar.make(coordinatorLayout,"點擊了floatingActionButton",Snackbar.LENGTH_LONG).show();

這樣就實現(xiàn)了簡單的動畫聯(lián)動诗祸。這個是最簡單的使用,等一下學了 CollapsingToolbarLayout和AppbarLayout 配合起來更華麗轴总。


CollapsingToolbarLayout

完贬媒。。肘习。际乘。。漂佩。脖含。罪塔。。养葵。征堪。。关拒。佃蚜。。着绊。谐算。。归露。洲脂。。

文章原創(chuàng)作者GuoLin 書籍推薦

郭林大神原創(chuàng)android 書籍:《第一行代碼 android》

淘寶鏈接: https://s.click.taobao.com/t?e=m%3D2%26s%3DgKUfuKdAZKocQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67p2n%2BQBNMyE6Rku8%2Bpj6eJall3bs%2B3NRhNHnsKI%2BqxhyM0iVZhTFBom4YIorMPnmg8G0g2OJi%2FzmXHfenomYtn5EW9vzeG8LzfPUwktUBEmkxg5p7bh%2BFbQ%3D&pvid=10_106.6.161.154_3367_1490163222155

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剧包,一起剝皮案震驚了整個濱河市恐锦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疆液,老刑警劉巖一铅,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異堕油,居然都是意外死亡潘飘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門馍迄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來福也,“玉大人局骤,你說我怎么就攤上這事攀圈。” “怎么了峦甩?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵赘来,是天一觀的道長。 經(jīng)常有香客問我凯傲,道長犬辰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任冰单,我火速辦了婚禮幌缝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诫欠。我一直安慰自己涵卵,他們只是感情好浴栽,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轿偎,像睡著了一般荸恕。 火紅的嫁衣襯著肌膚如雪问麸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音倒彰,去河邊找鬼。 笑死镐牺,一個胖子當著我的面吹牛撞蜂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挖诸,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼汁尺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了多律?” 一聲冷哼從身側(cè)響起痴突,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狼荞,沒想到半個月后辽装,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡相味,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年拾积,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丰涉。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡拓巧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出一死,到底是詐尸還是另有隱情肛度,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布投慈,位于F島的核電站承耿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伪煤。R本人自食惡果不足惜加袋,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抱既。 院中可真熱鬧职烧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恬总,卻和暖如春前普,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背壹堰。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工拭卿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贱纠。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓峻厚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谆焊。 傳聞我的和親對象是個殘疾皇子惠桃,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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

  • Android Design Support Library使用詳解 Google在2015的IO大會上,給我們帶...
    eclipse_xu閱讀 2,525評論 5 25
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,732評論 25 707
  • This is an H1 This is an H2 一級標題 二級標題 三級標題 四級標題 五級標題 六級標題...
    合绞裕魂2046閱讀 318評論 0 0
  • 長城賞秋 颯颯西涼掃古臺辜王,賞秋來晚葉黃衰。 不如坐看天窮處罐孝,云淡風輕雁對來呐馆。
    BRS閱讀 239評論 3 1
  • 人際關系投入時間:1.2天發(fā)個信息,3天打電話莲兢, 2.要是想換掉一個合作長期的供應商不是那么容易的事情.3找對...
    愛吃嫻蛋黃的蛋蛋閱讀 636評論 0 0