譯自 http://android-developers.blogspot.com/2014/10/implementing-material-design-in-your.html —— By NashLegend
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、南鄭網(wǎng)站維護(hù)、網(wǎng)站推廣。原譯文在我的Github上:https://github.com/NashLegend/ProjectBabel/blob/master/Implementing%20Material%20Design%20in%20Your%20Android%20app.md
關(guān)于如何在低版本Android上使用Material Design,可以看上篇:在低版本Android上使用Material Design。
Material Design對(duì)于多屏幕的視覺、交互和動(dòng)作設(shè)計(jì)作了很大的改進(jìn)。Android 5.0和最新的支持包可以幫助你創(chuàng)建Material風(fēng)格的UI。這里將概述新的Material Design風(fēng)格設(shè)計(jì)、新的API和組件,你可以將它們用在你的app中。
在Material Design的世界中,UI是由電子紙和電子墨水構(gòu)建起來的。這些UI的表面和陰影為應(yīng)用程序的結(jié)構(gòu)提供視覺線索(也就是根據(jù)樣式能看出層次關(guān)系等等,比如下圖),你看他的樣子就知道哪里是可觸摸的部分、就可以知道它將以何種方式運(yùn)動(dòng)(同樣如下圖)。這種Didital Material可以移動(dòng)、擴(kuò)張和變形以創(chuàng)建靈活的UI界面。
一個(gè)surface的位置和深度決定了其光影的微妙變化。你可以使用新的elevation屬性設(shè)置view在Z軸的位置,系統(tǒng)會(huì)依此在view后自動(dòng)繪制出實(shí)時(shí)的動(dòng)態(tài)陰影。你可以在layout XML里面設(shè)置elevation屬性,單位是dip:
你也可以在代碼中通過getElevation()/setElevation()(with shims in ViewCompat)方法操作elevation屬性。View投身的陰影是由其輪廓決定的,而默認(rèn)情況下這個(gè)輪廓是由background產(chǎn)生的。舉個(gè)栗子:如果你為一個(gè)浮動(dòng)按鈕設(shè)置了一個(gè)圓形的shape drawable背景,那么它的陰影就是圓形的。如果你想能對(duì)陰影進(jìn)行更詳細(xì)的控制,你可以使用ViewOutlineProvider來自定義其輪廓,通過getOutline()方法可以取得這個(gè)輪廓。
要顯示一些不同的信息,使用卡片是一個(gè)常用模式。你可以使用新的支持包中的CardView輕松創(chuàng)建卡片式布局,新的CardView在低版本Android上也支持輪廓和陰影。
CardView繼承了FrameLayout并提供了默認(rèn)的elevation和圓角,這樣卡片在不同版本的系統(tǒng)上就擁有統(tǒng)一的表現(xiàn)。如有必要,你還可以通過設(shè)置cardElevation
和cardCornerRadius
自定義這些屬性。但是卡片并不是實(shí)現(xiàn)維度效果的不二法門,所以別濫用。
Material Design借鑒了印刷設(shè)計(jì)以創(chuàng)建簡明清晰的布局,將你的內(nèi)容部分突出在前面和中間。大膽的配色、刻意的留白、精致的排版和強(qiáng)大的基線網(wǎng)格(a strong baseline grid)產(chǎn)生了具有層次感、有意義、突出重點(diǎn)的布局.
Android 5.0升級(jí)了系統(tǒng)Roboto字體,現(xiàn)在無論字體大小,都可以漂亮整潔地顯示字體。系統(tǒng)還新增了一個(gè)新的適用于中等字號(hào)(android:fontFamily=”sans-serif-medium”),新的文本顯示樣式使用了備受好評(píng)的字體排版縮放以平衡內(nèi)容密度的閱讀舒適度。舉個(gè)栗子:你可以通過設(shè)置android:textAppearance=”@android:style/TextAppearance.Material.Title”
輕松地使用"Title"樣式,可以通過AppCompat支持包在舊版本的Android系統(tǒng)上使用這種樣式,舉個(gè)栗子:“@style/TextAppearance.AppCompat.Title”
。
應(yīng)用的色調(diào)(color palette)會(huì)為你的應(yīng)用帶來品牌辨識(shí)度和個(gè)性化(比如一看見紅色就想到可口可樂),現(xiàn)在你們可以通過設(shè)置下面的屬性使得這些變得更加簡單。
colorPrimary. 應(yīng)用的主色調(diào)、品牌顏色,用于ActionBar背景、最近運(yùn)行任務(wù)界面標(biāo)題以及邊緣效果(比如說MIUI系統(tǒng)中可滾動(dòng)元素滾動(dòng)到邊緣時(shí)出現(xiàn)的橙***)。
colorAccent. 主色調(diào)的鮮亮補(bǔ)充色(Vibrant complement to the primary branding color),用于框架控件比如說EditText和Switch。(前面幾句真別扭,因此注:colorAccent,不知道專業(yè)術(shù)語是啥,直譯應(yīng)該是突出的顏色,因此,EditText的顏色并不是colorAccent,它得到焦點(diǎn)后的顏色才是colorAccent,還有Switch在打開時(shí)的顏色也是colorAccent,如上圖)。
colorPrimaryDark. 主色調(diào)的暗色版本,用于狀態(tài)欄。
除了上面這些之外,你還可以對(duì)顏色進(jìn)行更深入精細(xì)的控制,參見colorControlNormal, colorControlActivated, colorControlHighlight, colorButtonNormal, colorSwitchThumbNormal, colorEdgeEffect, statusBarColor
和navigationBarColor
。
AppCompat支持上面功能的絕大部分,因此你可以將此應(yīng)用在Android 5.0之前的系統(tǒng)中。
Material Design鼓勵(lì)使用動(dòng)態(tài)顏色,尤其是你的應(yīng)用中有很多圖片時(shí)。新的Palette支持庫可以提取圖片中的一部分顏色來設(shè)置你的UI的樣式來使界面顏色互相搭配以提供一種沉浸式體驗(yàn)。提取出來的調(diào)色板(palette)包括突出的和柔和的色調(diào)(vibrant and muted tones,參見下圖文字后面變化的背景色),同時(shí)可取得最佳閱讀體驗(yàn)的文本前景色(參見下圖的變化的文字顏色)。舉個(gè)栗子:
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { Palette.Swatch vibrant = palette.getVibrantSwatch(); if (swatch != null) { // If we have a vibrant color // update the title TextView titleView.setBackgroundColor( vibrant.getRgb()); titleView.setTextColor( vibrant.getTitleTextColor()); } } });
一圖勝千言。
Tangible surfaces不會(huì)突兀地出現(xiàn),他們出現(xiàn)的動(dòng)作要引導(dǎo)用戶注意力,要建立空間關(guān)聯(lián)并保持連貫性。Material元素會(huì)對(duì)你的觸摸事件做出響應(yīng)以對(duì)本次交互進(jìn)行確認(rèn),然后所有的變化將以你點(diǎn)擊的位置為中心向外擴(kuò)散。所有的動(dòng)作都是有意義的和密切相關(guān)的,使用戶易于理解。
通過聲明兩屏之間通用的共享元素
,你可以在兩種狀態(tài)間創(chuàng)建流暢的切換。
一圖勝千言:
示例代碼:
album_grid.xml …album_details.xml … AlbumActivity.java Intent intent = new Intent(); String transitionName = getString(R.string.transition_album_cover); … ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, albumCoverImageView, // The view which starts the transition transitionName // The transitionName of the view we’re transitioning to ); ActivityCompat.startActivity(activity, intent, options.toBundle());
我們?cè)趦善林g定義了相同的transitionName
。當(dāng)打開新的Activity的時(shí)候,切換過程就自動(dòng)開始了。除了共享元素之外,你也可以定義進(jìn)入和退出元素。
Material風(fēng)格的元素以一種波紋(ripple)擴(kuò)散的方式響應(yīng)用戶的觸摸。如果你使用了Theme.Material或者其派生的主題,那么交互性控件比如Button默認(rèn)就會(huì)擁有這種效果(as will ?android:selectableItemBackground)。你也可以在你的drawable上使用這種效果——只要把它們放到ripple元素里,如下:
自定義view通過View#drawableHotspotChanged回調(diào)方法將點(diǎn)擊位置傳遞過去,以便從點(diǎn)擊的位置發(fā)起ripple效果。
當(dāng)你觸摸Material元素的時(shí)候,它也可以抬起(鏈接里的Lift on touch)以迎合你的手指,就像磁鐵異性相吸一樣。你可以通過translationZ屬性動(dòng)畫來實(shí)現(xiàn)這種效果,translationZ屬性與elevation相似,不過它的主要作用是做這些過渡效果。 Z = elevation + translationZ. 新的stateListAnimator屬性輕松創(chuàng)建觸摸時(shí)的Z軸動(dòng)畫(Buttons默認(rèn)就有這效果):
示例代碼:
layout/your_layout.xmlanim/raise.xml
Material風(fēng)格的app顯示新內(nèi)容的一個(gè)典型過渡效果是一個(gè)向外擴(kuò)散的圓形遮罩。過渡動(dòng)畫以用戶點(diǎn)擊位置為圓心發(fā)起并向外擴(kuò)散,你可以使用下面這種Animator來實(shí)現(xiàn):
Animator reveal = ViewAnimationUtils.createCircularReveal( viewToReveal, // The new View to reveal centerX, // x co-ordinate to start the mask from centerY, // y co-ordinate to start the mask from startRadius, // radius of the starting mask endRadius); // radius of the final mask reveal.start();
動(dòng)作應(yīng)該是合理的(deliberate)、迅速的、精確的。與普通的緩動(dòng)效果不同的是,在Material Design里,物體傾向于快速開始然后緩動(dòng)到最終位置。在動(dòng)畫過程中,物體在最終位置附近時(shí)的運(yùn)動(dòng)使用了更多的時(shí)間,因此用戶不必要為了等待動(dòng)畫結(jié)束花費(fèi)更多時(shí)間,動(dòng)畫的負(fù)面效果被降到最低。這種動(dòng)作使用的是一個(gè)新的快進(jìn)慢出的插值器。
下面是一圖勝千言時(shí)間:
對(duì)于進(jìn)入和離開屏幕的元素(which should do so at peak velocity),分別使用linear-out-slow-in 分 fast-out-linear-in 插值器。
Material Design最后一個(gè)核心概念是創(chuàng)建一個(gè)單獨(dú)的自適應(yīng)設(shè)計(jì)布局就可以適配小到手表大到電視的所有尺寸和形狀(手表有圓有方)。自適應(yīng)設(shè)計(jì)設(shè)計(jì)技術(shù)幫助我們實(shí)現(xiàn)用同一個(gè)系統(tǒng)在不同設(shè)備上展示不同的外觀。每個(gè)view都會(huì)自適應(yīng)不同設(shè)備的尺寸的交互方式。 顏色、iconography,、層次、空間關(guān)系保持不變。Material Design系統(tǒng)提供了靈活的組件和模式以幫助你做到這一點(diǎn)。
Toolbar是ActionBar模式的一般化形式,它提供相似的功能以及更高的靈活性。與標(biāo)準(zhǔn)的ActionBar不同,Toolbar就在你的view的結(jié)構(gòu)層次中,你可以像操作其他的view完全一樣的操作它。你可以使用Activity.setActionBar()方法讓它變成你的ActionBar。
在這個(gè)例子里,藍(lán)色的Toolbar很高,被屏幕內(nèi)容覆蓋并且提供了一個(gè)導(dǎo)航按鈕。注意另外兩個(gè)Toolbar分別用在List和詳細(xì)內(nèi)容界面(說這么多無非是為了說明Toolbar很靈活)。
欲知更多Toolbar的使用方式,看這里。
Material Design幫助你創(chuàng)建易于理解的、漂亮的、自適應(yīng)的、動(dòng)起來的活的應(yīng)用。希望這篇文章能讓你動(dòng)心并將Material Design應(yīng)用到你的app里。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。