Android TV開發規範
一.Android TV概述
Android TV應用使用與手機和平板電腦相同的架構,這就意味着我們可以根據已經瞭解的有關構建Android應用的方法去構建新的電視應用程序,或者將現有的應用程序拓展到電視設備上去運行。
二.創建電視應用
Android提供了豐富的用戶體驗,針對大屏幕的設備(如Android TV)上運行的應用進行了優化。TV的用交互與平板和手機設備有很大的不同,爲了在TV設備上構建更好的應用程序,我們必須設計可以在10英尺外能輕鬆理解的佈局,並提供僅使用方向鍵和選擇按鈕的導航。
2.1 創建TV項目
創建在TV上運行的應用程序需要的兩個主要組件:
- Action for TV(必填)-在應用的manifest中,聲明要在TV上運行的Activity。
- TV Support Libraries(可選)-支持庫提供了用於創建在TV設備上運行的部件。
前提條件: - 將SDK工具更新至24.0.0或更高版本
更新SDK工具可以構建和測試電視應用程序 - 將SDK升級到Android 5.0(API 21)或者更高
更行後的平臺版本給應用提供了新的API - 創建或升級項目
爲了在TV設備上使用新的API,在創建或者修改已經存在的項目時,必須將目標設置爲Android 5.0(API 21)或者更高
2.1.1 聲明一個TV的Activity
應用要在TV上運行,必須在清單文件中聲明一個可以啓動的Activity,使用CATEGORY_LEANBACK_LAUNCHER Intent filter來執行此操作。這個filter能夠標識應用可以能夠在TV上使用和讓Google Play將其視爲TV應用。
<application
android:banner="@drawable/banner" >
...
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Leanback">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
</application>
2.1.2 聲明支持Leanback
聲明應用使用Android TV所需的Leanback用戶界面。如果開發移動設備(手機,可穿戴設備,平板電腦等)以及Android TV上運行的應用,將required屬性設置爲false;如果設置爲true,則應用僅能運行在使用Leanback UI的設備上。
<manifest>
<uses-feature android:name="android.software.leanback"
android:required="false" />
...
</manifest>
2.1.3 聲明不要觸摸屏
清單文件中必須聲明android.hardware.touchscreen這個功能不需要。這個設置將應用標識爲能在電視設備運行並且Google Play將其視爲TV應用,否則不會出現在電視設備上的Google Play中。
<manifest>
<uses-feature android:name="android.hardware.touchscreen"
android:required="false" />
...
</manifest>
2.1.4 提供桌面banner
Banner是顯示在桌面的應用的啓動入口。Banner應該是xhdpi資源,大小爲320 * 180,圖片中必須包含文字。如果app支持多語言,則必須爲每個支持的語言提供單獨版本的banner文字。
<application
...
android:banner = “@ drawable / banner” > ... </ application>
2.2電視硬件處理
電視硬件與其他Android設備不同,電視上不包括其他Android設備上的某些硬件功能,如觸摸屏,相機和GPS。在創建應用程序時,必須考慮電視硬件和要求。
2.2.1 檢測電視設備
如果應用同時在TV和其他設備上操作則需要檢測應用運行的設備並調整操作。確定是否在TV上運行推薦使用UiModeManager.getCurrentModeType()方法檢查。
2.2.2不支持的硬件功能
Hardware | Android feature descriptor |
---|---|
Touchscreen | android.hardware.touchscreen |
Touchscreen | emulator android.hardware.faketouch |
Telephony | android.hardware.telephony |
Camera | android.hardware.camera |
Near Field Communications (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Microphone | android.hardware.microphone |
Sensors | android.hardware.sensor |
Screen in portrait orientation | android.hardware.screen.portrait |
2.2.3 聲明電視硬件要求
在應用清單中聲明硬件功能要求以確保應用不會安裝在不提供這些功能的設備上,所有在電視設備上使用的應用必須聲明不需要觸摸屏功能。
<uses-feature android:name="android.hardware.touchscreen"
android:required="false"/>
<uses-feature android:name="android.hardware.faketouch"
android:required="false"/>
<uses-feature android:name="android.hardware.telephony"
android:required="false"/>
<uses-feature android:name="android.hardware.camera"
android:required="false"/>
<uses-feature android:name="android.hardware.nfc"
android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"
android:required="false"/>
<uses-feature android:name="android.hardware.microphone"
android:required="false"/>
<uses-feature android:name="android.hardware.sensor"
android:required="false"/>
2.2.4檢查硬件功能
在APP運行時,Android框架可以檢測硬件功能是否可用,在運行時使用hasSystemFeature(String)檢測特定功能是否可用。
// Check if android.hardware.touchscreen feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {
Log.d("HardwareFeatureTest", "Device has a touch screen.");
}
2.3電視控制管理
電視需要其他輔助設備如遙控器和遊戲手柄來與應用進行交互。因此應用必須支持遙控器輸入。應用可以通過上下左右,後退,主頁按鈕進行操作。當用戶操作遙控器時,應用會收到帶有Key Event的事件,應用應該與響應遙控器按鈕一直的行爲。
2.4電視佈局創建
電視屏幕通常距離大約10英尺遠,雖然TV比其他Android設備顯示器大得多,但並不能提供與較小設備相同水平的顏色和細節。因此創建應用時必須考慮TV設備佈局以提供好的用戶體驗。
2.4.1使用電視佈局主題
1.使用Leanback主題
v17 leanback support library包含了Theme.Leanback,該主題提供了統一的TV視覺風格,Android強烈建議在TV應用中使用v17 leanback。
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Leanback">
如果應用使用了support fragment,Activity必須繼承Fragment Activity。
2.No Title 主題
標題欄是手機和平板上Android 應用的標準UI元素,不適用TV應用,如果不使用v17leanback,應用應該在Activity上禁止顯示標題欄。
<application>
...
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
...
</activity>
</application>
2.4.2電視基本佈局設置
電視設備的佈局應遵循一些基本準則,以確保它們在大屏幕上可用且有效。
- 構建具有橫向方向的佈局。電視屏幕始終以橫向模式顯示。
- 使用Fragment來創建多個區域的UI,使用GridView替代ListView讓水平空間更好的利用。
- 使用如RelativeLayout,Linear Layout等View Group來排列Ui。
- 空間之間保持足夠的邊距避免UI混亂。
2.4.3 Over Scan
由於電視始終呈現全屏畫面給觀衆,電視佈局有一些獨特的要求,爲確保填滿整個顯示區,TV設備可以裁剪應用佈局的外邊緣。對用戶一直可見的屏幕元素必須位於OverScan的安全區內。爲了確保佈局元素在Over Scan的安全區內,在左右邊緣添加5% 的48dp,上下27dp的外邊距。此方法可以確保背景元素在所有的設備都正確。如果使用了v17 leanback類(如BrowseFragment相關空間),不要設置OverScan邊距,這些佈局已經包含過。
2.4.4創建文本和控件
電視應用佈局中的文本和控件應該很容易看到並可以遠距離導航。遵循以下提示:
- 將文本分成用戶可以快速掃描的小塊。
- 深色背景使用淺色文字。
- 避免輕量級字體或具有非常窄和非常寬的筆劃的字體。使用簡單的sans-serif字體和抗鋸齒來提高可讀性。
- 使用Android標準字體大小:android:textAppearance="?android:attr/textAppearanceMedium"。
- 確保所有視圖窗口小部件足夠大,以便與距離屏幕10英尺遠的人清晰可見(對於非常大的屏幕,此距離更大)。
2.5使用leanback支持庫創建電視播放應用
瀏覽和播放媒體文件是TV提供給用戶很常用的一個體驗,允許用戶快速瀏覽並獲取到所需內容非常的重要。Android v17 leanback支持庫爲這類應用提供了很好的框架。
2.5.1創建目錄瀏覽
在電視上運行的媒體應用程序需要允許用戶瀏覽其內容產品,進行選擇並開始播放內容。此類應用的內容瀏覽體驗應該簡單直觀。使用v17 leanback支持庫提供的類來實現用戶界面,以便從應用程序的媒體目錄中瀏覽音樂或視頻。Leanback支持庫中的BrowseFragment可以使用最少的代碼創建出媒體類別和瀏覽項。
2.5.2提供卡片視圖
給媒體文件創建卡片視圖並將他們顯示到目錄瀏覽,通常使用BaseCardView及其子類顯示媒體相關數據。
2.5.3創建詳情頁面
V17 leanback支持庫提供了媒體資源瀏覽界面用來顯示一些附加信息(如描述,評論),以及要對該媒體做什麼樣的操作(如購買或者播放該內容)。DetailsFragment類用來實現媒體詳情頁面。
2.5.4使用leanback操控控件
Leanback支持庫中的媒體播放控件提供了更好的用戶體驗。對於視頻類應用,控件提供了視頻快進快退預覽,快進快退時會顯示視頻縮略圖。Leanback支持庫使得UI控制與媒體播放實現分離。
2.5.5顯示正在播放的卡片
當TV 應用在後臺播放媒體文件時,必須顯示Now Playing 卡片。這張卡片允許用戶返回到正在播放媒體的應用。當有正在運行的MediaSession時,Android會在桌面去顯示Now Playing 卡片,卡片中可以包含媒體的metadata
三.幫助用戶在TV上找到APP的內容
TV提供了很多的娛樂選擇,來自APP及其相關服務。同時大多數用戶更喜歡在使用TV時做更少的輸入,因而應用應該提供快速簡便的路徑給用戶去發現內容。
3.1 在TV上推薦內容
根據不同的Android版本,Android TV 有兩種不同的方式在桌面顯示推薦內容:
- 在Android 8.0及以後版本,應用可以在一個或多個通道上顯示推薦內容,內容顯示在不同的行,默認行總是顯示,用戶可以在桌面添加其他的通道。
- 在Android 8.0之前,TV顯示所有的推薦在一個推薦行中,推薦行一直顯示在桌面。
3.2 讓應用內容可搜索
Android TV使用Android 搜索界面從已安裝的應用中檢索內容數據,並將結果返回給用戶。應用的數據內容可以包含在這些結果中,以便用戶及時訪問。當用戶在搜索框中輸入字符,應用必須爲Android TV提供字段,從中生成結果。因此應用必須實現Content Provider並伴隨着一個描述Content Provider和一些重要信息的searchable.xml文件。當用戶選擇了建議的搜索結果,應用需要一個Activity去處理這個意圖。
表字段:
Value | Description |
---|---|
SUGGEST_COLUMN_TEXT_1 | 內容名(需要) |
SUGGEST_COLUMN_TEXT_2 | 描述內容 |
SUGGEST_COLUMN_RESULT_CARD_IMAGE | 內容的圖片,海報,封面 |
SUGGEST_COLUMN_CONTENT_TYPE | 媒體的MIME類型(需要) |
SUGGEST_COLUMN_VIDEO_WIDTH | 媒體分辨率的寬 |
SUGGEST_COLUMN_VIDEO_HEIGHT | 媒體分辨率的高 |
SUGGEST_COLUMN_PRODUCTION_YEAR | 內容在製作年份(需要) |
SUGGEST_COLUMN_DURATION | 媒體的時長(需要) |
Searchable.xml:
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/search_label"
android:hint="@string/search_hint"
android:searchSettingsDescription="@string/settings_description"
android:searchSuggestAuthority="com.example.android.tvleanback"
android:searchSuggestIntentAction="android.intent.action.VIEW"
android:searchSuggestIntentData="content://com.example.android.tvleanback/video_database_leanback"
android:searchSuggestSelection=" ?"
android:searchSuggestThreshold="1"
android:includeInGlobalSearch="true">
</searchable>
處理搜索請求:
...
<activity
android:name="com.example.android.tvleanback.DetailsActivity"
android:exported="true">
<!-- Receives the search request. -->
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<!-- No category needed, because the Intent will specify this class component -->
</intent-filter>
<!-- Points to searchable meta data. -->
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
...
<!-- Provides search suggestions for keywords against video meta data. -->
<provider android:name="com.example.android.tvleanback.VideoContentProvider"
android:authorities="com.example.android.tvleanback"
android:exported="true" />
...
3.3 TV 應用內的搜索
當在TV上使用媒體應用時,用戶經常會考慮特定的內容。若果應用包含大量的內容目錄,瀏覽標題不是用戶找到所需內容的最好方式。因此搜索界面可以幫助用戶更快的獲取到他們想要的內容。LeanBack 支持庫一組類,使應用程序的搜索界面與電視搜索功能一致,搜索頁面使用包含了SearchFragment的佈局,這個Fragment必須實現SearchFragment.SearchResultProvider。
四 Android TV設計準則
Android TV具有沉浸式和高分辨率,支持最佳的TV互動體驗。它採用了10英尺之外的material design UI風格。與便攜式設備不同,電視體驗是在不同的空間內發生,並且需要在十英尺之外清晰可見。
4.1 設計原則
4.1.1 視覺創意
- 休閒體驗:人們經常以輕鬆的心態使用電視。休閒體驗是Android TV的主要使用,在內容搜索時,每個部分都應該簡單,新的內容易於被發現。減少選擇的次數,默認操作只需點擊一次即可。
- 電影體驗:用圖片和聲音去描述內容,大屏幕給高分辨率圖片和視覺元素提供了創建豐富動態體驗的機會。在過渡和反饋操作期間使用移動。
- 輕量級的互動:最大限度地減少執行操作所需的導航步驟數,儘可能避免讓用戶輸入文本,並在需要輸入文本時使用語音界面。
4.1.2 爲TV設計的應用
適合電視的應用
- Should:包含簡單的設置,利用有限放大屏幕,共享公共資源,突出主要的內容。
- Should not:文字量大,注重任務管理。
簡單的導航
- TV應該爲內容選擇提供快捷的操作路徑。
信息密度
- Should:默認顯示最重要和最必要的信息,使用滾動會漸進來展示內容。
Should not:避免過度顯示,不要一次顯示多有內容。
4.2 App導航
4.2.1 焦點
焦點總在一個對象上。文字,按鈕,卡片或其他元素都可以獲取焦點,要清楚的表明哪個被選擇或者獲取到了焦點。
- 焦點可見:獲取焦點的和沒有獲取的要有對比區別。
-
反饋:在有焦點和沒焦點之間切換時給用戶視覺上的反饋。在焦點改變時或者有選中時,TV也有聲音上的反饋。
4.2.2 結構設計
- 明確的方向操作:控件放置不與其他可操作的控件重疊,例如搜索操作,避免在很難操控到的位置擺放控件。
Do
Do not - 軸:設計佈局時利用水平與垂直軸,爲每個方向指定特定功能,使大型的層次結構可以快速的導航。
Do
Do not
4.3 TV應用程序
瀏覽頁:瀏覽頁是TV應用程序常用入口,通過類別使用戶可以方便瀏覽。
詳細頁:詳細頁提供了所選內容的相關描述,講可操作的內容和詳細信息放在屏幕立即可見的位置,不需要滑動。
App搜索:提供快速搜索應用內容的方法。
Dialog:
在左側爲用戶提供所需的內容,強烈建議包含相關的描述。
默認焦點應該始終位於Key Line上,用戶選擇後應該跳轉到下一屏或關閉對話框。
App設置:
建議將設置放在最後一欄,設置應該顯示在設置面板中。
Color:如果強調色太淺,使用較暗的背景色,不要使用較爲鮮豔的顏色尤其是作爲白色文字的背景。
字體樣式:
主色調:在應用的整個UI中使用一致的顏色方案,例如卡片,瀏覽欄,控制條,背景圖像等。