電視導覽

電視裝置為應用程式提供的導覽控制項有限。為電視應用程式建立有效的導覽架構,取決於您是否瞭解這些有限的控制選項,以及使用者操作應用程式時的限制。在為電視建構 Android 應用程式時,請特別注意使用者使用遙控器按鈕 (而非觸控螢幕) 導覽時的情況。

原則

目標是讓使用者感覺導覽自然且熟悉,不會佔用使用者介面,也不會分散對內容的注意力。下列原則奠定的基準,可在各個 TV 應用程式間達到一致且直觀的使用者體驗。

高效率

簡化內容存取方式。使用者希望盡量減少點擊次數,快速存取內容。以最少畫面呈現資訊。

可預測

請遵循最佳做法和建議,讓使用者能預測導覽方式。請勿不必要地重新發明導覽模式,因為這會導致混淆和不可預測性。

直覺

簡化導覽功能,順暢支援廣泛採用的使用者行為。請勿新增不必要的導覽層,以免過於複雜。

控制器

控制器有多種樣式,從極簡遙控器到複雜的遊戲控制器都有。所有遙控器都包含方向鍵 (D-Pad),以及選取、主畫面和返回按鈕。其他按鈕會因型號而異。

電視遙控器
圖 1. 電視遙控器範例。

D-Pad
在電視上,主要操作方式是使用 D-Pad,包括上、下、左、右方向的硬體按鈕。D-Pad 會將焦點從一個物件轉移到按鈕按下方向的最近物件。

「選取」按鈕
選取畫面上聚焦的項目。

首頁按鈕
將使用者帶往系統首頁。

返回按鈕
讓使用者返回上一個檢視畫面。

麥克風按鈕
啟動 Google 助理或語音輸入。

D-Pad 導覽

在電視裝置上,使用者可使用 D-Pad 或箭頭鍵瀏覽內容。這類控制項會將移動方向限制為上、下、左和右。如要建構優質的電視專用應用程式,您必須提供導覽架構,讓使用者能快速瞭解如何使用這些有限的控制選項瀏覽應用程式。

Android 架構會自動處理版面配置元素之間的導覽方向,因此您通常不需要為應用程式執行任何額外操作。不過,您應該使用 D-Pad 控制器徹底測試導覽功能,找出任何導覽問題。

請按照下列指南測試應用程式的導覽系統,確保在電視裝置上使用 D-Pad 時能順暢運作:

  • 確認使用者可以透過 D-pad 控制器瀏覽畫面上的所有可見控制項。
  • 如要捲動焦點所在的清單,請確認 D-Pad 的上下按鈕可捲動清單,且選取按鈕可選取清單中的項目。確認使用者可以選取清單中的元素,且選取元素後清單仍可捲動。
  • 確保控制項切換方式簡單易懂。

修改方向鍵導覽

Android 架構會根據版面配置中可聚焦元素的相對位置,自動套用方向導覽配置。使用 D-Pad 控制器,在應用程式中測試產生的導覽配置。測試後,如果您決定要讓使用者以特定方式瀏覽版面配置,可以為控制項設定明確的方向導覽。

下列程式碼範例說明如何定義要接收焦點的下一個控制項,適用於 TextView 版面配置物件:

<TextView android:id="@+id/Category1" android:nextFocusDown="@+id/Category2" />

下表列出 Android 使用者介面小工具的所有可用導覽屬性:

屬性 函式
nextFocusDown 定義使用者向下瀏覽時,要將焦點移至的下一個檢視區塊。
nextFocusLeft 定義使用者向左導覽時,要接收焦點的下一個檢視區塊。
nextFocusRight 定義使用者向右導覽時,要接收焦點的下一個檢視區塊。
nextFocusUp 定義使用者向上導覽時,要接收焦點的下一個檢視區塊。

如要使用其中一個明確導覽屬性,請將值設為版面配置中另一個小工具的 android:id。請務必將導覽順序設為迴圈,讓最後一個控制項將焦點導回第一個控制項。

清楚顯示焦點和選取範圍

使用者能否快速判斷焦點所在的使用者介面元素,是決定應用程式在電視裝置上導覽機制是否成功的關鍵。如果沒有清楚指出焦點項目,使用者就無法判斷可對哪個項目採取行動,很快就會感到沮喪並退出應用程式。基於同樣的理由,請務必在應用程式啟動後或閒置時,讓使用者能立即對焦點項目採取行動。

在應用程式版面配置和實作中,使用顏色、大小、動畫或這些屬性的組合,協助使用者判斷接下來可以採取哪些動作。在整個應用程式中,使用統一的配置來指出焦點。

Android 提供可繪製狀態清單資源,可實作焦點和所選控制項的醒目顯示效果。下列程式碼範例示範如何為按鈕啟用視覺行為,指出使用者已導覽至控制項並選取該控制項:

<!-- res/drawable/button.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

下列版面配置 XML 程式碼範例會將先前的狀態清單可繪項目套用至 Button

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />

請務必在可聚焦和可選取的控制項內提供充足的邊框間距,確保周圍的醒目顯示清楚可見。

返回按鈕操作

為確保平台上的應用程式行為一致,請確認返回按鈕的行為符合下列指南。

使用可預測的返回按鈕行為

為打造簡單易懂的導覽體驗,使用者按下遙控器的返回按鈕時,請將他們帶往先前的目的地。

使用頂端導覽列時的導覽流程
圖 2. 使用頂端導覽列的 Flow。
使用側邊導覽時的導覽流程
圖 3. 使用側邊導覽列的流程。

如果使用者從選單項目前往頁面中間的資訊卡,然後按下返回按鈕,結果會因應用程式使用頂端或左側導覽而異:

  • 應用程式使用頂端導覽列:快速捲動並啟用選單焦點,將使用者帶回頁面頂端。
  • 應用程式使用左側導覽:啟用左側側邊選單,並將焦點放在目前啟用的選單項目。

確認返回按鈕不會受到確認畫面限制,也不會進入無限迴圈。

詢問使用者是否要結束的對話方塊
圖 4. 退出閘道

錯誤做法:
避免設定退出閘道。讓使用者不必確認即可退出應用程式。


在關閉和開啟選單之間循環瀏覽
圖 5. 導覽迴圈

錯誤做法:
請勿進入無限迴圈,不斷關閉及開啟選單。理想情況下,按下返回鍵應會退出應用程式。除非是特殊情況 (例如兒童設定檔),否則請勿在選單中顯示退出按鈕。

不要顯示向上或返回按鈕

與手持式裝置不同,遙控器上的返回按鈕是用於在電視上向後瀏覽。不必在畫面上顯示虛擬返回按鈕:

螢幕上顯示虛擬返回鍵
圖 6. 軟體返回鍵

錯誤做法:

視需要顯示取消按鈕

如果只顯示確認、破壞性或購買動作,建議加入「取消」按鈕,返回上一個目的地:

與破壞性動作一起顯示的取消按鈕
圖 7. 軟取消按鈕。

正確做法:

實作返回瀏覽功能

Android 架構通常會妥善處理返回導覽,就像處理 D-Pad 一樣。如果您使用 Navigation 元件,可以支援各種導覽圖。有時您可能需要實作一些自訂行為,例如讓返回鍵將焦點重設為長清單的開頭。

ComponentActivityFragmentActivityAppCompatActivity 的基礎類別,可讓您透過 OnBackPressedDispatcher 控制返回按鈕的行為,該項目可透過呼叫 getOnBackPressedDispatcher() 取得。

詳情請參閱「提供自訂返回瀏覽功能」。

電視上的播放控制項

影片播放是電視最重要的功能之一。Android TV 應用程式中的影片播放器行為必須一致。請參閱電視播放控制項指南

「即時」分頁導覽

除了遵守TV 應用程式品質規定,在「直播」分頁中整合電視直播動態饋給的應用程式,也必須符合流暢播放體驗和返回導向的要求,詳情請參閱下列章節。

順暢播放

流暢播放體驗適用於從 Google TV 和 Android TV 透過任何直播或線性頻道深層連結啟動應用程式後的行為。

使用者點選深層連結時,適用下列規則:

  • 不得延遲:使用者必須直接進入頻道播放畫面,不得出現阻礙或延遲畫面,例如登入或註冊流程,或是品牌宣傳影片。
  • 冷啟動例外狀況:如果深層連結從冷啟動開始載入目標應用程式,則允許啟動延遲。這種情況下也允許使用應用程式啟動品牌宣傳影片或動畫。
  • 載入延遲例外狀況:如果頻道需要幾秒才能載入,則允許顯示品牌宣傳內容。時間長度必須僅限於載入頻道所需的時間。

如果使用者已登出或未訂閱,你可以封鎖付費頻道的播放功能,完成登入或註冊流程。

Direct-back

使用者從「直播」分頁標籤上的深層連結啟動應用程式,然後按下返回按鈕時,無論經過多少時間,都必須在單次按下返回按鈕後返回「直播」分頁標籤。Google TV 和 Android TV 上的所有「直播」分頁深層連結都必須具備這項返回導向行為。

系統會附加深層連結參數:?exit_on_back=[true|false],藉此區分「直播」分頁的深層連結。應用程式必須剖析這項參數,判斷應用程式是否從「直播」分頁啟動。如果 exit_on_backtrue,應用程式必須實作直接返回行為。

請注意,如果使用者在深層連結後第一次按下按鈕時,按下的不是返回按鈕,則不適用直接返回規定,只需要標準的返回按鈕行為

舉例來說,假設使用者在追蹤深層連結後按下 D-Pad 的選取按鈕,這時會顯示控制項疊加層。使用者等待疊加畫面消失,然後按下返回鍵。由於在點選深層連結後按下的第一個按鈕是 D-pad 選取按鈕,因此不適用直接返回規定。而是套用一般應用程式返回堆疊邏輯。

使用者重複按下返回鍵時,必須先返回應用程式根目錄,然後返回 Google TV 或 Android TV,不得出現無限迴圈。詳情請參閱「可預測的返回按鈕行為」一節。

定義完善的導覽架構可協助使用者瞭解自己在應用程式中的位置,以及如何存取不同內容。請考慮導覽設計的下列面向。

固定的起始目的地

使用者從啟動器啟動應用程式時看到的第一個畫面,也是使用者在按下返回按鈕後,返回啟動器時看到的最後一個畫面。

深層連結會模擬手動導覽

無論是深層連結或是手動導覽至特定目的地,使用者都可以使用返回按鈕瀏覽目的地,回到起始目的地。

螢幕截圖:顯示應用程式內詳細資料頁面的深層連結。按下返回鍵會前往該應用程式的主畫面,再次按下返回鍵則會返回原始畫面。
圖 8.深層連結至詳細資料頁面。

從其他應用程式深層連結至某個應用程式時,會模擬手動導覽。舉例來說,如果使用者從 Google TV 直接前往 Moviestar 應用程式的詳細資料頁面,然後按下返回按鈕,系統會將他們帶往 Moviestar 應用程式的首頁。

清除所有可聚焦元素的路徑

讓使用者清楚瞭解如何操作使用者介面。如果無法直接前往控制項,建議重新放置。

控制項放置在不重疊位置的版面配置
圖 9. 控制焦點。

請執行下列操作。
將控制項 (例如這裡顯示的搜尋動作) 放在不會與其他可點擊元素重疊的位置。

控制項位於難以觸及位置的版面配置
圖 10. 控制焦點。

錯誤做法:
避免版面配置中的控制項位於難以觸及的位置。使用 D-Pad 可能難以執行這裡顯示的搜尋動作。

斧頭 (Axes)

設計版面配置時,請同時運用水平和垂直軸。 為每個方向指定特定功能,方便快速瀏覽大型階層。

使用垂直類別和水平項目的版面配置
圖 11. 周遊。

執行。
類別可沿垂直軸移動,各類別中的項目則可沿水平軸瀏覽。

複雜的巢狀版面配置階層
圖 12. 周遊。

錯誤做法:
避免複雜和巢狀的版面配置階層。