編寫:awong1900 - 原文:http://developer.android.com/training/tv/start/navigation.html
TV設備為應用程序提供一組有限的導航控件。為我們的TV應用創建有效的導航方案取決於理解這些有限的控件和用戶操作應用時的限制。因此當我們為TV創建Android應用時,額外注意用戶是用遙控器按鍵,而不是用觸摸屏導航我們的應用程序。
這節課解釋了創建有效的TV應用導航方案的最低要求和如何對應用程序使用這些要求。
在TV設備上,用戶用遙控器設備的方向手柄(D-pad)或者方向鍵去控制控件。這類控制器限制為上下左右移動。為了創建最優化的TV應用,我們必須提供一個用戶能快速學習如何使用有限控件導航的方案。
Android framework自動地處理佈局元素之間的方向導航操作,因此我們不需要在應用中做額外的事情。不管怎樣,我們也應該用D-pad控制器實際測試去發現任何導航問題。接下來的指引是如何在TV設備上用D-pad測試應用的導航。
基於佈局元素中可選中的元素的相對位置,Android framwork自動應用導航方向方案。我們應該用D-pad控制器測試生成的導航方案。在測試後,如果我們想規定用戶以一個特定的方式在佈局中移動,我們可以在控件中設置明確的導航方向。
Note: 如果系統使用的默認順序不是很好,我們應該僅用這些屬性去修改導航順序。
接下來的示例代碼展示如何為TextView佈局控件定義下一個控件焦點。
<TextView android:id="@+id/Category1"
android:nextFocusDown="@+id/Category2"\>
接下來的列表展示了用戶接口控件所有可用的導航屬性。
屬性 | 功能 |
---|---|
nextFocusDown | 定義用戶按下導航時的焦點 |
nextFocusLeft | 定義用戶按左導航時的焦點 |
nextFocusRight | 定義用戶按右導航時的焦點 |
nextFocusUp | 定義用戶按上導航時的焦點 |
去使用這些明確的導航屬性,設置另一個佈局控件的ID值(android:id
值)。我們應該設置導航順序為一個循環,因此最後一個控件返回至第一個焦點。
在TV設備上的應用導航方案的成功是基於用戶如何容易的決定屏幕上界面元素的焦點。如果我們不提供清晰的焦點項顯示(和用戶能操作的選項),他們會很快洩氣並退出我們的應用。同樣的原因,重要的是當我們的應用開始或者任何無操作的時間中,總是有焦點項可以立即操作。
我們的應用佈局和實現應該用顏色,大小,動畫或者它們組在一起來幫助用戶容易地決定下一步操作。在應用中用一致的焦點顯示方案。
Android提供Drawable State List Resources來實現高亮選中的焦點。接下來的示例代碼展示瞭如何為用戶導航到控件並選擇它時使用視覺化按鈕顯示:
<!-- res/drawable/button.xml -->
<?xml version="1.0" encoding="utf-8"?>
<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示例代碼對按鈕控件應用了上面的按鍵狀態列表drawable:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/button" />
確保在可定為焦點的和可選中的控件中提供了充分的填充,以便圍繞它們的高亮是清楚的。
更多建議關於TV應用中設計有效的選中和焦點,看Patterns of TV。