Android,有效的導航設計,簡化翻譯。
Best Practices for User Experience & UI
Designing Effective Navigation
導航:幫助使用者有效直覺地使用你的應用。
Planning Screens and Their Relationships
應用的資訊模型可以用實體關系圖表示(entity-relationship diagrams (ERDs))。
定義出資訊模型之後,就可以定義你的app所需要的所有螢幕畫面。然後定義出螢幕之間的直接關系、跳轉邏輯。這樣就得到了screen map。
之後就可以設計一些細節,比如導航跳轉按鈕之類的。
Planning for Multiple Touchscreen Sizes
Android裝置是有不同的類型和尺寸的,比如手機、平闆,甚至還有電視。
你的應用應該能夠适配不同的螢幕尺寸和方向,提供平衡且美觀的布局。
當平闆橫放的時候,通常是從左到右,詳細程度遞增。
很多桌面應用和網站都提供了左側導航闆,或者使用一種master/detail的兩面闆布局方式。
單面闆一般使用Activity實作,多面闆可以用Fragment實作。
多面闆需要考慮的一個重要問題就是螢幕方向問題,當多面闆解決了平闆上的布局問題時,在橫向可能工作得很好,但是垂直螢幕時又出了問題,是以可能會需要根據不同的螢幕方向寫不同的布局。
在解決平闆縱向布局問題時,一些常用的政策如下:
Stretch:拉伸寬度。

Expand/collapse:展開/折疊:比如将左側導航清單折疊。
Show/Hide:顯示/隐藏:這種方法将左側完全隐藏。
Stack:重新堆疊你的panel。
通過提供多面闆的布局,我們可以把螢幕結成組,可以重新規劃一下上一節中的screen map。
Providing Descendant and Lateral Navigation
導航有兩種,縱向和橫向的,也即繼承的和橫向的(Descendant and Lateral)。
兄弟螢幕的關系也分兩種:關系相關的(collection-related)和部分相關的(section-related)。
前者表達同一個集合中的項目之間的關系,部分相關,表達的是同一個parent的不同部分。
Buttons and Simple Targets
這種section-related的螢幕之間,最直覺的導航方式是在parent裡提供各種按鈕之類的控件來進行觸摸導航。
選擇了控件後,相應的child screen被打開,完全取代目前螢幕。
一種常用的基于button的模式就是dashboard(儀表盤)模式。這個模式是一種展現所有部分的很好的方法。
大的目标會讓UI更易用。Dashboard模式通常用于同等重要性的部分,但是這個模式在更大的螢幕上看起來并不是很漂亮,并且使用者需要額外的這一步才能進入到真正的應用内容中。
Lists, Grids, Carousels, and Stacks
對于集合關系的元素,比如文字資訊,最直覺的方式是垂直滾動的清單。
對于照片或者視訊,比較常用的是:豎直滾動的格子(grid),水準滾動的清單(有時叫做carousels(旋轉木馬?)),或者是stacks(有時也叫cards)。
這種list-based模式的導航通常用于顯示元素較多的集合,但是也會有問題,那種項目較多、較深的清單(drill-down list navigation),通常是沒有效率和繁重的,要得到一個特定的部分有可能需要點選(觸摸)很多次,使用者體驗會不佳,尤其對比較着急的使用者來說。
使用垂直的清單也比較尴尬,在大的螢幕上,寬度被擴充,高度一定,會有很多沒用的空白。
一種緩解的方法就是加入文字資訊,說明一下;另一種就是在這個list旁邊加入其它的一個水準的面闆。
Tabs
對于水準導航來說,使用tab是很常見的。Tab比較适合于小的集合(小于4)的section-based的螢幕。
Tab應該一直保持一緻,每次選擇Tab之後隻有Content區域會發生變化,并且Tab應當一直都在。
Tab應該沒有曆史,并且應該在頂端。
Horizontal Paging (Swipe Views)
另一個比較流行的水準導航模式是水準的page,也叫swipe views。
這種模式最好用于collection-related的螢幕。和tab一樣,這種模式也可以嵌套其他。
這種水準滑動page模式适用于内容有相似性,并且頁數比較少的情況。
可以和Tab結合。對于collection-related的項目來說,如果螢幕之間有順序關系,這種page模式是最直覺的。
如果子screen有水準平移的表面,比如地圖,是不适用這種模式的。
Providing Ancestral and Temporal Navigation
導航不隻是往下往child走,還應該向上向祖先走。并且要遵循Android的約定,提供傳回鍵的回退功能。
Support Temporal Navigation: Back
提供臨時的導航,即曆史回退,是Android系統重要的一個方面。
所有的Android使用者都會期待back鍵會把他們帶回到上一個螢幕。
螢幕曆史的最根部是Launcher application,也即桌面,即按Back按鈕足夠多的次數後回傳回到桌面,并且此時再按Back,就什麼事也不會發生了。
Provide Ancestral Navigation: Up and Home
在Android 3.0之前,最常見的向上導航就是Home傳回。
這通常是通過裝置上的菜單按鈕,或者螢幕左上角的Home按鈕(經常是作為Action Bar的一部分)實作的。
通過選擇Home,使用者通常會被帶到螢幕繼承關系的最上層,即應用的首頁。
提供對應用首頁的直接入口可以給使用者安慰和安全感。不管他們在應用的哪個部分,隻要他們選擇Home,就可以回到熟悉的首頁。
Android 3.0引入了Up,在Action Bar裡作為Home鍵的替代品。
選擇Up,使用者将會傳回本繼承層次中的父螢幕。
這種導航通常是傳回上一個螢幕(像Back鍵一樣),但也不總是這樣。
程式員必須要确定每個螢幕的Up都會傳回一個單獨的、确定的父畫面。
在有些情況下,Up也可以用來執行一些動作,比如側邊欄的顯示隐藏控制。
實作注意:實作Home或者Up的時候,要注意back stack的清理。
可以在intent中用标記 FLAG_ACTIVITY_CLEAR_TOP and FLAG_ACTIVITY_NEW_TASK來實作。
Putting it All Together: Wireframing the Example App
http://developer.android.com/training/design-navigation/wireframing.html
參考資料
Best Practices for User Experience & UI
http://developer.android.com/training/best-ux.html
Designing Effective Navigation
http://developer.android.com/training/design-navigation/index.html
Multi-pane Layouts
http://developer.android.com/design/patterns/multi-pane-layouts.html
Navigation
http://developer.android.com/design/patterns/navigation.html
作者: 聖騎士Wind
出處: 部落格園: 聖騎士Wind
Github: https://github.com/mengdd
微信公衆号: 聖騎士Wind