編寫:XizhiXu - 原文:http://developer.android.com/training/design-navigation/ancestral-temporal.html
既然現(xiàn)在我們能進(jìn)入應(yīng)用界面某個層級,我需要提供一個方法來在層級里向上導(dǎo)航到父親或祖先界面中。此外,我們應(yīng)該保證通過 Back 按鈕來回退歷史導(dǎo)航記錄。
回退/向上導(dǎo)航設(shè)計(jì)
設(shè)計(jì)指南請閱讀 Android 設(shè)計(jì)文檔的Navigation模式指導(dǎo)
歷史導(dǎo)航,或者說在歷史的界面間導(dǎo)航,在 Android 系統(tǒng)中由來已久。不論其他狀態(tài)如何,所有 Android 用戶都期望 Back 按鈕能帶他們回到之前的界面。歷史界面集全都以用戶的 Launcher 應(yīng)用為基礎(chǔ)(電話的 “Home” 鍵)。也就是說,按下 Back 鍵足夠多次數(shù)后你應(yīng)該回到 Launcher,之后 Back 鍵不做任何事情。
http://wiki.jikexueyuan.com/project/android-training-geek/images/app-navigation-ancestral-navigate-back.png" alt="app-navigation-ancestral-navigate-back" />
Figure 1. 從 Contacts(聯(lián)系人)app中進(jìn)入電子郵件 app 然后按 Back 鍵的行為
應(yīng)用自身通常不必考慮去管理 Back 按鈕。系統(tǒng)自己自動處理 task 和 back H1H2H3H4 stack(回退棧),或者叫歷史界面列表。 Back 按鈕默認(rèn)反向訪問界面列表,然后當(dāng)按鈕被按下時從列表中移除當(dāng)前界面。
但是總是有一些你可能需要重寫 Back 行為的例子。比如,你屏幕包含一個嵌入的網(wǎng)頁瀏覽器,在這個瀏覽器中你的用戶可和頁面元件進(jìn)行交互來在網(wǎng)頁間導(dǎo)航。你可能希望當(dāng)用戶按下設(shè)備的 Back 鍵時觸發(fā)嵌入瀏覽器的默認(rèn) back 操作。當(dāng)?shù)竭_(dá)了瀏覽器內(nèi)部歷史的起始點(diǎn),你就應(yīng)該遵從系統(tǒng) Back 按鈕的默認(rèn)行為了。
Android 3.0 之前,最常見的向上導(dǎo)航的形式以 Home 表示。大體上是以在設(shè)備 Menu 按鈕里提供一個 Home 的可選項(xiàng)這樣的方法來實(shí)現(xiàn),或者 Home 按鈕出現(xiàn)在屏幕的左上角作為 Action Barbar(詳見Android 設(shè)計(jì)的模式章節(jié))的一個組件。當(dāng)選中 Home 后,用戶被帶到界面層級的頂層,通常被叫做應(yīng)用的主界面。
提供對程序主界面的直接訪問能帶給用戶一種舒適感和安全感。無論位于應(yīng)用程序何處,如果你在 App 中迷路了,你可以點(diǎn)選 Home 然后回到那熟悉的主界面。
Android 3.0 引入了 Up 記號,它被展示在了 Action Bar 上代替了上述的 Home 按鈕。點(diǎn)擊 Up,用戶將被帶入到結(jié)構(gòu)中的父界面。這個導(dǎo)航操作通常就是進(jìn)入前一個界面(就像之前 Back 按鈕討論中描述的一樣),但是并不是永遠(yuǎn)都這樣。因此,開發(fā)者必須保證 Up 對于每個界面都會導(dǎo)航到某個既定的父親界面。
http://wiki.jikexueyuan.com/project/android-training-geek/images/app-navigation-ancestral-navigate-up.png" alt="app-navigation-ancestral-navigate-up" />
Figure 2. 從聯(lián)系人 App 中進(jìn)入電子郵件 App 然后按 Up 導(dǎo)航的行為
某些情況下,Up 適合執(zhí)行某個行為而非導(dǎo)航到一個父親節(jié)點(diǎn)。以 Android 3.0 平板上的 Gmail 應(yīng)用為例。當(dāng)查看一封郵件的對話時把設(shè)備平放,對話列表和對話詳情將并排顯示。這是一種之前課程中的父、子界面組合。然而,當(dāng)豎屏查看郵件對話時,只有對話詳情被顯示。Up 按鈕被用來使父視窗滑入屏幕顯示。當(dāng)左側(cè)視窗可見時再按一次 Up 按鈕,單個對話便回到全屏的對話列表中。
實(shí)現(xiàn)提醒: 實(shí)現(xiàn) Home 或 Up 導(dǎo)航的最佳做法就是保證清除back stack中的子界面。對于 Home,Home 界面是唯一留在back stack中的界面。對于 Up 導(dǎo)航,當(dāng)前界面也應(yīng)該從back stack中移除,除非 Back 在不同界面層級間導(dǎo)航。你可以將 FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK這兩個 Intent 標(biāo)記一起使用來實(shí)現(xiàn)它。
最后一節(jié)課中,我們應(yīng)用現(xiàn)在為止所有課程中討論的概念來為我們新聞應(yīng)用例子創(chuàng)建交互設(shè)計(jì) Wireframe(線框圖)。