Android Design in Action —— 編與集
[核心提示] 又一篇 Android Design 的指南,教會(huì)你 Android Design in Action 的藝術(shù),各位苦逼的 Android 工程師們快快拜讀!
大家好, 這是久違了的 Android Design in Action 欄目. 本期 Android Design in Action 介紹的是如何更好的, 合理的展現(xiàn)一個(gè)集合 (Collection).
首先, 我們明確一下概念:?什么是集合??集合就是一組物體. 對(duì)于 Android 應(yīng)用而言, 基本上集合就意味著一個(gè)列表的項(xiàng)目, 比如最常見(jiàn)的書(shū)單和購(gòu)物清單, 等等.
說(shuō)道集合, 我想大家都應(yīng)該對(duì)上面的三種表現(xiàn)方法不陌生吧, 他們分別代表了最常見(jiàn)的基本布局 —— 列表, 網(wǎng)格與 viewpager. 這期 Android Design 我們將著重研究前兩種.
我們將從兩個(gè)方面入手進(jìn)行討論 —— 集合的使用與集合的變更. 其中, 集合的使用又包含了提純內(nèi)容與響應(yīng)式布局, 變更包括了添加/消除, 重排序與物件操作.
集合的使用
提純內(nèi)容
對(duì)于一個(gè)集合而言, 這些操作是非常重要的: 快速卷動(dòng), 首標(biāo), 改變視圖與排序:
在左邊的聯(lián)系人應(yīng)用中, 每個(gè)字母都被歸納為一個(gè)分段, 每個(gè)分段都有一個(gè)置頂首標(biāo). 帶有首字母索引的快速卷動(dòng)與置頂首標(biāo)可以幫助用戶更快的進(jìn)行模糊的范圍查看. 而在卷動(dòng)時(shí), 首標(biāo)保持在列表的頂端, 同時(shí) Indexed Scroll 也會(huì)提示當(dāng)前的首字母;
中間的圖庫(kù)應(yīng)用中, 為了讓用戶方便的以不同方式查看縮略圖, 圖庫(kù)在 Action Bar 上提供了一個(gè)切換視圖的下拉菜單. 另外, 你可以注意到, 在當(dāng)前文件夾的名字下方, 用小一號(hào)的字體標(biāo)識(shí)了當(dāng)前的視圖模式, 這也是一種不錯(cuò)的提示方式;
右邊的第三方應(yīng)用中, 它采用了一個(gè) Action Bar 圖標(biāo)附加下拉菜單提供了變更排序方式的功能. 對(duì)于 Android 而言, 這些都是很基本而常見(jiàn)的提純內(nèi)容的方式與行為.
接下來(lái)要講到的操作, 就是真正的”提純”操作了. 這些提純操作直接影響到項(xiàng)目, 會(huì)使屏幕中顯示的項(xiàng)目減少, 精煉. 他們更像是過(guò)濾器.
最常見(jiàn)的項(xiàng)目提純操作就是標(biāo)準(zhǔn)的搜索功能了. 他能直接顯示出與用戶輸入相符的項(xiàng)目. 比如在聯(lián)系人中, 搜索能直接顯示出你搜索的聯(lián)系人. 當(dāng)你有很大的項(xiàng)目總量時(shí), 搜索能提供非常不錯(cuò)的效果;
第二種項(xiàng)目提純操作是集合過(guò)濾器. 作為例子的 Pocket 提供了這樣的過(guò)濾功能, 它能讓列表中只剩下某種類型的項(xiàng)目, 比如文章, 視頻或者圖片. 值得注意的是, 過(guò)濾器作為一個(gè)”操作”被放置在 Action Bar 中, 但是它同時(shí)又提供了下拉菜單, 所以具有一個(gè) Spinner 的標(biāo)識(shí)符 (右下箭頭) (就像圖庫(kù)等應(yīng)用的分享操作一樣);
最后一種, 也是我最喜歡的一種, 是過(guò)濾器 Drawer. 當(dāng)你采用了左側(cè) Drawer 來(lái)提供應(yīng)用內(nèi)導(dǎo)航的時(shí)候, 有沒(méi)有思考一下, 右側(cè)是不是也能放一個(gè) Drawer, 這個(gè) Drawer 又能干些什么呢? 對(duì)于一個(gè)集合而言, 右側(cè) Drawer 作為過(guò)濾器的好處是顯而易見(jiàn)的. 這個(gè)過(guò)濾器能夠讓用戶在設(shè)置過(guò)濾閾值的時(shí)候?qū)崟r(shí)預(yù)覽到結(jié)果, 對(duì)于用戶體驗(yàn)而言是很大的改進(jìn). 另外, Drawer 也可以通過(guò)從右側(cè)邊緣劃入的手勢(shì)展開(kāi), 非常便利. 有一個(gè)需要注意的地方是, 如果你要在 Drawer 中使用示意圖中那樣的滑塊選擇器, 請(qǐng)一定要小心不要讓左右拉動(dòng)滑塊的操作和對(duì) Drawer 的操作產(chǎn)生沖突 —— 如果你用過(guò) Feedly (版本 17) 的那個(gè)腦殘 Drawer, 你就會(huì)明白為什么我要特地強(qiáng)調(diào)這一點(diǎn)了.
關(guān)于右側(cè) Drawer 還有一點(diǎn)需要注意的是, 在 Android Design 中, 導(dǎo)航用的 Drawer 是放在左邊的. 不要把導(dǎo)航 Drawer 放在右側(cè). 右側(cè) Drawer 的定制性更強(qiáng), 可以變成你需要的任何東西.
響應(yīng)式布局
當(dāng)我們談?wù)摷系臅r(shí)候, 我們很難想象一個(gè)集合會(huì)以某一種固定的形式出現(xiàn)在你的面前. 各式各樣的集合會(huì)以不同的大小不同的形狀顯示在不同的設(shè)別上. 就以列表做例子, 列表在小屏幕上是個(gè)不錯(cuò)的選擇, 但是當(dāng)你在一臺(tái)大屏幕設(shè)備上橫屏查看一個(gè)被放大的列表, 那么體驗(yàn)就必然是很差勁的了 —— 空間被浪費(fèi)了, 信息顯示也太多了.
于是, 怎么解決這個(gè)問(wèn)題呢?
最簡(jiǎn)單的辦法就是, 把列表變成一個(gè)框格. 對(duì)于開(kāi)發(fā)而言, 列表和框格都不是很有難度的東西. 只要為不同的屏幕提供不同的布局, 就可以很輕松的解決很多問(wèn)題. 尤其好用的場(chǎng)景是, 當(dāng)你的列表是由圖片和標(biāo)題文字組成的時(shí)候.
第二個(gè)方法就是把框格中的內(nèi)容交錯(cuò)排布. 我們稱之為錯(cuò)落集合. 這就比單純的從列表變?yōu)榭蚋褚獊?lái)得更高級(jí)了. 這么做會(huì)讓你的集合變得更漂亮. 同時(shí), 你也可以給不同的項(xiàng)目以不同的權(quán)重, 讓用戶注意到這些項(xiàng)目中更值得注意的東西.
如果你巧妙的將列表, 框格和錯(cuò)落集合搭配使用, 你就既能得到更多的展示空間, 又能擁有極佳的排版效果. 這方面的例子就是?Pocket. Pocket 在不同的屏幕上采用了不同的布局方式: 在小屏幕上采用常規(guī)的帶圖列表, 7″ 平板上使用框格布局, 更大的平板上則采用錯(cuò)落集合. 通過(guò)這種方式, 他們避免了很多應(yīng)用在平板上有過(guò)大的留白的問(wèn)題 (以前的 ADiA 上反而是建議留白…?Pattrn?就是采用了留白的例子).
當(dāng)你考慮”在不同的設(shè)備上顯示內(nèi)容”這么個(gè)問(wèn)題的時(shí)候, 不妨跳出以往的框架, 考慮響應(yīng)式布局. 最簡(jiǎn)單的辦法, 就是在大屏幕上采用”列表|詳細(xì)”布局. 這樣, 你就可以依然采用小屏幕上采用的列表布局, 同時(shí)能夠在大屏幕上取得不錯(cuò)的顯示效果.
當(dāng)你需要不同大小的圖片的時(shí)候, 中心裁切會(huì)幫你大忙. 在犧牲掉一部分圖片的前提下保持原圖片的比例, 中心裁切可以幫助你很容易的制作框格視圖和錯(cuò)落布局中使用的圖片. 關(guān)于圖片的詳情, 我們會(huì)在以后的文章中介紹.
提到排版布局, 不得不提到最近非常流行的一種設(shè)計(jì)風(fēng)格, Google 將其稱之為”由內(nèi)而外式設(shè)計(jì)”. 所謂的由內(nèi)而外的設(shè)計(jì), 就是把內(nèi)容放在最優(yōu)先, 把你想要展示的內(nèi)容放在最顯眼的位置, 而不是從一個(gè)空白畫(huà)布和網(wǎng)格開(kāi)始, 生硬的往里面填東西. 而這種設(shè)計(jì)風(fēng)格的最直觀的體現(xiàn), 就是卡片 —— 內(nèi)容塊.
當(dāng)我們開(kāi)始考慮展示內(nèi)容的時(shí)候, 我們會(huì)注意到內(nèi)容有不同的形式. 相應(yīng)的, 我們也應(yīng)該選擇不同的展示方式. 就卡片而言, 我們可以采用大卡片, 中卡片或者小卡片, 豎排的卡片或者橫排的卡片. 這些卡片都代表著不同的內(nèi)容. 當(dāng)你確定了你將要采用哪些卡片 (展示方式) 之后, 你就可以開(kāi)始把這些卡片放到屏幕上了 —— 在 Photoshop 中新建畫(huà)布, 開(kāi)始工作.
多放幾個(gè)這樣的卡片, 你就做出了一個(gè)最基本的集簇.
在你做出了一個(gè)基本集簇之后, 你就可以在這個(gè)基本集簇上進(jìn)行擴(kuò)展了. 剛才做的不同大小的卡片這時(shí)候便派上了用場(chǎng), 利用不同大小或者橫豎的卡片來(lái)替換原本全部是大號(hào)的卡片, 能夠起到區(qū)分優(yōu)先級(jí)與合理利用空間的作用.
當(dāng)這些集簇在設(shè)備上顯示的時(shí)候, 你就需要意識(shí)到, 不是每個(gè)設(shè)備都能完整的顯示一個(gè)集簇. 而集簇的排布方式同時(shí)也應(yīng)該順應(yīng)頁(yè)面的卷動(dòng)方式 —— 假設(shè)這里采用的是縱向卷動(dòng), 那么也許使用更多橫向的卡片會(huì)更加合適.
在更大的設(shè)備上, 集簇能夠被完整的顯示, 這時(shí)候更重要的就是如何排布他們才能制造更佳的視覺(jué)效果了.
綜上, 所謂的從內(nèi)而外式設(shè)計(jì), 就是從最小的控件開(kāi)始, 以展示信息為優(yōu)先, 一步步向外擴(kuò)展, 最后構(gòu)建出一個(gè)合理的框架, 而不是先搭建框架, 然后再一步步向里面填入內(nèi)容.
舉個(gè)例子, 這是 Play Store 中的電影卡片. 對(duì)于一部電影, 最重要的展示信息就是海報(bào), 標(biāo)題, 價(jià)格與簡(jiǎn)介. 于是我們制作了三種不同尺寸的卡片, 每一種都能充分的展示前述的四種信息.
之后需要做的, 就是在不同的設(shè)備上顯示合適尺寸的卡片了. 當(dāng)然, 也許你會(huì)希望一次性顯示很多個(gè)項(xiàng)目, 那么只要合理的將卡片整理組合成集簇即可.
合集的變更
有的時(shí)候, 用戶可以向集合中添加項(xiàng)目, 也可以刪除它們; 這些項(xiàng)目或許可以被移動(dòng), 被操作. 那么如何使這些集合上的變更行為變得更為友好呢?
增刪項(xiàng)目
對(duì)于一個(gè)可以被用戶變更集合而言, 添加和移除項(xiàng)目是最為基礎(chǔ)的操作.
往集合中添加項(xiàng)目的方法有很多, 一般情況下, 最常見(jiàn)的方式就是在 Action Bar 上提供一個(gè)”新建/添加”功能鍵. 比如說(shuō), 在上圖左的聯(lián)系人應(yīng)用中, 這樣的按鈕讓用戶創(chuàng)建一個(gè)新的聯(lián)系人/聯(lián)系人組;
不過(guò)這么簡(jiǎn)單粗暴的添加新項(xiàng)目方式顯然不是我們所推薦的. 很多時(shí)候, 我們都被一種想法束縛: 添加作為一個(gè)動(dòng)作/操作, 應(yīng)該位于 Action Bar 中. 不過(guò), 我認(rèn)為不妨換個(gè)思路來(lái)看看. 比起用一個(gè)專門(mén)的按鈕來(lái)提供新增功能, 不如試試行內(nèi)式/嵌入式的新建方式. 比如, 圖中的 Play Music 在電臺(tái)列表的頂端提供了新建電臺(tái)的按鈕, 而 Keep 則做的更好, 它在列表的末尾提供了一個(gè)顏色略淺一些的”新建項(xiàng)目”來(lái)告訴用戶”這并不是一個(gè)項(xiàng)目, 而是類似幽靈的存在”, 而當(dāng)用戶點(diǎn)擊這個(gè)項(xiàng)目的時(shí)候, 就相當(dāng)于激活了這個(gè)項(xiàng)目, 讓它從幽靈變成實(shí)體. 可以看出, 行內(nèi)式/嵌入式的添加功能可以更好的與已有項(xiàng)目融為一體;
還有一種不錯(cuò)的添加方式是空白狀態(tài). 當(dāng)用戶第一次安裝/開(kāi)啟應(yīng)用時(shí), 他們面對(duì)的很有可能是一個(gè)空白的頁(yè)面. 那么, 比起冷冰冰的告訴用戶”這里沒(méi)有內(nèi)容”, 為什么不利用空白狀態(tài), 提示用戶自己創(chuàng)建內(nèi)容以作為新建項(xiàng)目的指示呢? 在圖中的 Keep 中, 內(nèi)容區(qū)域的那個(gè) Create a reminder 就是一個(gè)巨大的按鈕, 用戶觸摸這個(gè)區(qū)域, 就會(huì)進(jìn)入新建提醒的界面. 這個(gè)方式對(duì)于大部分用戶自建內(nèi)容的列表都適用.
當(dāng)你沒(méi)法在 Android Design 給出的標(biāo)準(zhǔn)圖標(biāo)中找到你需要的圖標(biāo)時(shí), 那么就得考慮自己制作新圖標(biāo)了. 制作 Action Bar 圖標(biāo)有一種普遍的規(guī)則, 就像制造一個(gè)新的單詞一樣. 我們把圖標(biāo)本身視為詞根 —— 比如添加群組中的群組 (三個(gè)小人) —— 把操作視為后綴 —— 比如添加群組中的添加 (加號(hào)) —— 這么一來(lái), 一個(gè)圖標(biāo)就做完了~
就像這樣, 很簡(jiǎn)單吧? 這些圖標(biāo), 基本上都能讓人一看便明白他們的含義 (除了倒數(shù)第二個(gè)… 我可不覺(jué)得倒數(shù)第二個(gè)能夠一眼看懂… ).
用戶既然能夠添加項(xiàng)目, 那么自然也要能移除他們.
首先要提到的是位于項(xiàng)目上的項(xiàng)目 Action Overflow. 這三個(gè)小點(diǎn)里可以放下各種針對(duì)單個(gè)項(xiàng)目的操作. 有一點(diǎn)需要注意的是, 這三個(gè)小點(diǎn)雖然看起來(lái)非常小, 但是他們的觸發(fā)區(qū)域依然要有 48dp x 48dp 大, 甚至可以做得更大, 讓整個(gè)項(xiàng)目的右下角都成為可觸發(fā)區(qū)域. 當(dāng)用戶點(diǎn)擊這三個(gè)點(diǎn)之后, 一個(gè) Overflow 菜單就會(huì)出現(xiàn). 在 Play Music 中, 當(dāng)你點(diǎn)擊三個(gè)小點(diǎn)的時(shí)候, 就會(huì)出現(xiàn)刪除操作的選項(xiàng);
另外一種比較傳統(tǒng)的方式就是采用 Contextual Action Bar. 舉個(gè)例子, 在圖庫(kù)應(yīng)用中, 當(dāng)你長(zhǎng)按選中某張圖片的時(shí)候, Contextual Action Bar 便會(huì)出現(xiàn), 提供了全選, 分享和刪除等操作. 不過(guò), 還記得我在上一篇文章里是怎么說(shuō) Contextual Action Bar 的嗎? 可見(jiàn)性不足. Contextual Action Bar 需要通過(guò)長(zhǎng)按來(lái)喚出, 很多時(shí)候存在著可見(jiàn)性不足的問(wèn)題. 所以在你打算采用這種方法之前, 最好再考慮考慮;
第三種移除項(xiàng)目的方式, 就是隨著 Android 4.0 一起亮相 (實(shí)際上 webOS 啥上早就有了…) 的滑動(dòng)刪除/滑動(dòng)忽略. 這種方案在縱向/橫向列表上的效果最佳. 當(dāng)用戶開(kāi)始向左/右或上/下 (取決于列表卷動(dòng)方向) 滑動(dòng)某個(gè)項(xiàng)目時(shí), 項(xiàng)目會(huì)變成半透明并且漸隱. 而且, 這個(gè)手勢(shì)還可以和滑入/下滑動(dòng)畫(huà)結(jié)合使用 —— 當(dāng)用戶滑動(dòng)消除某一項(xiàng)目之后, 原本在項(xiàng)目前后/左右的項(xiàng)目滑動(dòng)填補(bǔ)到它原本的位置上, 以消除生硬感, 同時(shí)傳遞出這個(gè)項(xiàng)目已經(jīng)從列表中移除的信息.
在這里我必須再?gòu)?qiáng)調(diào)一遍, 雖然我們很喜歡滑動(dòng)消除這個(gè)手勢(shì), 但是這個(gè)手勢(shì)的可見(jiàn)性太低了. 請(qǐng)務(wù)必提供可以通過(guò)單擊完成的移除操作以提高可見(jiàn)性. 正面例子可以參考 Gmail (單擊頭像選取信息, 出現(xiàn) Contextual Action Bar). 另外, 為了讓用戶意識(shí)到滑動(dòng)刪除的存在, 你可以在列表上使用”滑入”的動(dòng)畫(huà).
重排項(xiàng)目
除了增刪項(xiàng)目, 用戶也許還會(huì)希望自己重新排列表單的順序. 這對(duì)于用戶的個(gè)性化需求而言是十分重要的. 舉個(gè)最簡(jiǎn)單的例子, 用戶非常需要對(duì)一系列的”任務(wù)”進(jìn)行重新排序.
最簡(jiǎn)單直接的方式就是提供一個(gè)拖動(dòng)把手. Android 上標(biāo)準(zhǔn)的拖動(dòng)把手是三道短橫線 (實(shí)際上 Roman Nurik 也說(shuō)這三道短橫線就是縮小版的 Drawer 提示… 所以我們也叫它 Slider 滑塊),
當(dāng)然, 你也可以使用自己的樣式, 比如兩列小方塊之類的, 讓人覺(jué)得摩擦力很大的圖示. 右邊的DashClock?中采用的圖示就是一種被稱為”輪轍”的指示, 算是一種前段時(shí)間廣為流傳的指示方式;
在左邊兩個(gè)圖示里, Google Keep 和 Play Music 都采用了標(biāo)準(zhǔn)的把手. 當(dāng)用戶按下這個(gè)把手的時(shí)候, 當(dāng)前的項(xiàng)目便會(huì)略微浮起和/或高亮, 給用戶以”這個(gè)項(xiàng)目被提起來(lái)了”的反饋. 很重要的一點(diǎn)是, 當(dāng)你的應(yīng)用中, 列表頁(yè)左側(cè)是 Drawer 觸發(fā)區(qū)時(shí), 如何才能確定觸發(fā) Drawer 和移動(dòng)項(xiàng)目的操作不沖突? 這個(gè)時(shí)候, 你應(yīng)該先想想, 在這個(gè)地方, 究竟是重排項(xiàng)目更為重要, 還是導(dǎo)航 Drawer 更為重要? 如果是重排項(xiàng)目更重要, 那么你大可以把拖動(dòng)把手放在項(xiàng)目的右側(cè), 或者告訴用戶”按住圖片可以拖動(dòng)項(xiàng)目”, 或者采用之后介紹的長(zhǎng)按拖動(dòng)方式. 另外, 這個(gè)把手雖然看起來(lái)很小, 但是它的實(shí)際操作區(qū)域必須大于 48dp —— 甚至我建議開(kāi)發(fā)者們應(yīng)該把操作區(qū)域擴(kuò)展到整個(gè)列表項(xiàng)那么高, 只留 8dp 上下間距;
在 Google Keep 中, 我們還是用了另外一種方式來(lái)移動(dòng)項(xiàng)目, 那就是長(zhǎng)按拖動(dòng). 實(shí)際上, 在 Android 系統(tǒng)原本的邏輯中, 重排就是通過(guò)長(zhǎng)按后拖動(dòng)來(lái)進(jìn)行的, 比如主屏圖標(biāo)的重排. 當(dāng)你在 Keep 中拖動(dòng)一個(gè)項(xiàng)目的時(shí)候, 你會(huì)看到項(xiàng)目變成半透明狀跟隨你的手指移動(dòng), 而在框格中則有一個(gè)和項(xiàng)目一樣大的方框提示了當(dāng)你松開(kāi)手指之后項(xiàng)目會(huì)落下的區(qū)域. 同時(shí), 其他項(xiàng)目也會(huì)隨著當(dāng)前項(xiàng)目位置的變化而改變位置. 但是這種排序方式的壞處依然是可見(jiàn)性不足. 這點(diǎn)很難通過(guò)直觀的方式提示, 除了在用戶第一次使用的時(shí)候進(jìn)行文字提示.
另外, 很重要的一點(diǎn)是, 請(qǐng)務(wù)對(duì)用戶的拖放操作進(jìn)行恰當(dāng)?shù)姆答? 就像前面提到的, 讓項(xiàng)目”飛離”原先的高度, 高亮項(xiàng)目, 或者讓項(xiàng)目變成虛影, 都是很好的提示方式. 還記得 Android Design 的精髓么?擬真. 在現(xiàn)實(shí)中, 我們重排東西的時(shí)候, 都會(huì)把一個(gè)東西拿起, 移動(dòng)到需要的位置之后, 放下. 請(qǐng)把同樣的操作反饋在應(yīng)用中顯示出來(lái).
項(xiàng)目操作
我想我在上一篇文章中似乎已經(jīng)吐槽過(guò) Android 這混亂的上下文菜單了. 通常情況下, 點(diǎn)擊項(xiàng)目本身會(huì)帶你進(jìn)入項(xiàng)目詳情的界面, 或者執(zhí)行一級(jí)操作. 那么如果這個(gè)項(xiàng)目還附有次級(jí)操作呢?
首先依然是項(xiàng)目 Action Overflow. 這個(gè)菜單里能放的東西很多, 不單單是刪除, 在 Play Store 里你還可以直接安裝一個(gè)應(yīng)用;
其次依然是 Contextual Action Bar. 和 上下文 Action Overflow 一樣, 在 Contextual Action Bar 中可以放各種各樣的操作. 甚至很多需要進(jìn)入詳情界面才能執(zhí)行的操作都可以放在 Contextual Action Bar 上. 當(dāng)然, Contextual Action Bar 還有一個(gè)好處就是他能夠同時(shí)操作多個(gè)項(xiàng)目. 換句話說(shuō), 如果你想讓用戶同時(shí)操作多個(gè)項(xiàng)目, 那就只能選擇 Contextual Action Bar 了. 批量操作的效率是絕對(duì)高過(guò)另外兩種方式的;
還有一種很普遍的方式是在項(xiàng)目的右側(cè)放一個(gè) Borderless Button 以提供一個(gè)最重要的次級(jí)操作. 這種方式的好處就是它是行內(nèi)/嵌入式的, 關(guān)聯(lián)性最高, 可見(jiàn)性也很強(qiáng). 不足之處就是只能放一個(gè)操作, 而且不能批量操作. 需要注意的是, 如果你需要采用這種形式的按鈕, 請(qǐng)務(wù)必添加分隔線讓用戶明白, 這個(gè)項(xiàng)目上有兩個(gè)不同的操作區(qū)域. 另外, 這個(gè)按鈕整列都是可觸摸的區(qū)域. 另外需要注意的就是觸摸反饋. 理論上來(lái)說(shuō), 觸摸項(xiàng)目的話, 應(yīng)該讓整行都發(fā)光, 而觸摸右側(cè)按鈕時(shí)應(yīng)該只讓按鈕區(qū)域發(fā)光. 這里有個(gè)很好的例子, 就是在聯(lián)系人應(yīng)用中的電話號(hào)碼項(xiàng)目. 每個(gè)號(hào)碼的右側(cè)都有一個(gè)短信圖標(biāo), 這就是電話號(hào)碼的次級(jí)操作了.
看到這里, 關(guān)于集合的內(nèi)容就都講完了. 再次大力感謝 Android Developers Relation Team 的?+Roman Nurik, 和?+Nick Butcher的?Android Design in Action?活動(dòng). 另外, 這期的題圖依然是又結(jié)畫(huà)的, 再次感謝~ 不久之后的下期節(jié)目再見(jiàn)~
EOF
作者:NovaDNG
原文地址:http://www.geekpark.net/read/view/191288
- 目前還沒(méi)評(píng)論,等你發(fā)揮!