1. 程式人生 > >Android TV開發經驗總結---初識TV開發

Android TV開發經驗總結---初識TV開發

        之前一直從事手機APP應用開發,由於工作的需要轉入TV電視端的開發,初次接觸確實有點懵逼,在TV開發過程中的處理思路跟手機還是有很大區別的,接下來將講述下TV開發過程的經驗,與大家一起分享共同學習。

       剛接觸TV開發,需要我們轉變下思路,在TV開發中沒有以前我們手機端的什麼 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 事件來分發,而需要使用dispatchKeyEvent、onKeyDown、onKeyLisenter 等事件來分發處理焦點問題,而且TV端焦點沒有什麼好辦法可以全域性控制,需要我們自己來想辦法規定焦點走向,可能一個沒處理好,就一臉懵逼了,焦點為啥跑的不見了,焦點為啥跑那裡去了等等問題。 接下來我們就說說在TV端開發的基礎知識

   Android TV app開發與一般Android開發最大的區別在於焦點控制 , 使用者在使用Android TV裝置主要是通過遙控器操作app。機頂盒應用不同於手機應用,因為多數是沒有觸控式螢幕的,只能靠遙控器,所以要保持一個焦點的位置,讓使用者知道當前操作作用的物件. 然而一些app,依據系統對focus的判斷,會出現的狀況: 上下導航時,不是想要的結果. 邊緣移動時,會出現焦點丟失的狀況. 有時想直接定位到某個位置上. 

        android提供了一些焦點相關的屬性,在現有的框架層下通過設定View的屬性來獲得焦點

        android:focusable:設定一個控制元件能否獲得焦點
        android:background:設定在作為背景的drawable
        android:nextFocusDown:定義下一個獲得焦點的控制元件當按下鍵時
        android:nextFocusUp:定義下一個獲得焦點的控制元件當按上鍵時
        android:nextFocusLeft:定義下一個獲得焦點的控制元件當按左鍵時
        android:nextFocusRight:定義下一個獲得焦點的控制元件當按右鍵時
        <requestFocus/>:強制設定一個焦點到指定的view或它的一個子類,前提是android:focusable為true能夠獲得焦點

         下面列出兩種方法處理焦點問題

   第一種方法:

   採用Android自帶的直接控制焦點上下左右的方法。這種方法的前提是必須知道每個view的id,因此在進行佈局時有必須要通過view.setId(…)指定view的特定ID,然後通過view.setNextLeftView(…)等四個方法控制該view的上下左右移動後所到達的view。然而這種方法只適用於前提就設定好ID的場景,不適合動態佈局的場景

第二種方法:

在一些比較複雜的Layout中,特別是涉及到在View的焦點變化的過程中還要控制view的背景以及字型顏色變化等。必須對每個ImageButton 設定焦點捕獲實際(setOnFocusChangeListener),在該監聽事件中處理

ImageButton.setOnFocusChangeListener(){ 
          public void onFocus(boolean Focus){ 
                   if( Focus ){
                    // ImageButton 2.1 獲焦時, ImageButton 2.1 改變獲取焦點背景, ImageButton 1.1也改變失去焦點背景 
                    } else{
                     //  ImageButton 2.1 獲焦時,  ImageButton 2.1 改變失去焦點背景 ,  ImageButton 3.1也改變獲取焦點背景  
                    }
  然後使用Key事件分發來確定焦點移動方向,一般可以使用onKeyDown事件進行處理
public void OnKeyDown(int keyCode, KeyEvent event){
                    if( event.KEYCODE_DROP_UP== keyCode ){  //如果按下的是上鍵
                            mImgBtnArray1[ThirdIndx ].requestFocus;
                     }
                    if( event.KEYCODE_DROP_DOWN == keyCode ){  //如果按下的是下鍵
                              mImgBtnArray3[ ThirdIndx ].requestFocus;
                     }
                    if( event.KEYCODE_DROP_LEFT == keyCode ){  //如果按下的是左鍵
                              mImgBtnArray1[ ThirdIndx-1 ].requestFocus;
                     }
                    if( event.KEYCODE_DROP_RIGHT == keyCode ){  //如果按下的是右鍵
                              mImgBtnArray1[ ThirdIndx+1 ].requestFocus; 
                     }
       }
    接下來講講TV開發中需要了解的KeyCode 可以參考下此部落格講解的按鈕事件

 常用的按鍵Code有 

  KEYCODE_MENU 選單鍵

  1. * 方向鍵  
  2.  * KEYCODE_DPAD_CENTER 
  3.  * KEYCODE_DPAD_UP  
  4.  * KEYCODE_DPAD_DOWN  
  5.  * KEYCODE_DPAD_LEFT  
  6.  * KEYCODE_DPAD_RIGHT 

      在按鍵過程中 按下和鬆開的Action主要是ACTION_DOWN、ACTION_UP  事件分發和處理是在 ACTION_DOWN 中處理

此處需要特別說明的是    View.setFocusable(true);   改變控制元件是否可以獲得焦點,然而同時會觸發 setOnFocusChangeListener事件 

   接下來將會講解在TV開發中所涉及到的控制元件使用技巧

相關推薦

Android TV開發經驗總結---初識TV開發

        之前一直從事手機APP應用開發,由於工作的需要轉入TV電視端的開發,初次接觸確實有點懵逼,在TV開發過程中的處理思路跟手機還是有很大區別的,接下來將講述下TV開發過程的經驗,與大家一起分享共同學習。        剛接觸TV開發,需要我們轉變下思路,在TV開

Android TV開發經驗總結---控制元件Gridview使用

    前一篇我們已經講解的基本Android TV 開發的基礎技能,接下來聊聊TV開發中所涉及到的控制元件運用     目前Android TV 開發的資料不是蠻多,經過一系列的搜尋,目前比較適用的框架推薦  https://git.oschina.net/hailong

java_web項目開發經驗總結(一)

從數據 簡單 處理 開發 事務 傳輸 記錄 承載 基礎上   web項目就像一個動態的記事本,功能很強大,你最初的項目功能調研越給力,項目所能發揮的作用也就越給力。這是因為web網絡的強聯系性,大家都可以通過訪問到自己想要訪問的頁面,頁面裏既可以承載信息,也可以承載做事情的

多年iOS開發經驗總結

pla tostring 技術 draw zed 權限 provide cst gre 1、禁止手機睡眠 [UIApplication sharedApplication].idleTimerDisabled = YES; 2、隱藏某行cell - (CG

iOS開發經驗總結

圓形 service selector prot 區域 location dsi layout tty 1、設置UILabel行間距 NSMutableAttributedString* attrString = [[NSMutableAttributedString

解析工具Gson源碼讀後感,真實項目開發經驗總結

name 生成 lis OS 泛型 nbu gson ber 2.2.3 1 1 package gson; 2 2 3 3 import java.util.ArrayList; 4 4 import java.util.List; 5 5

產品開發經驗總結-讓你少奮鬥一年的經驗之談

奔潰 流轉 重做 幸運 節點數 進行 xp系統 協同開發 真的 新產品開發歷時1年多,總算馬馬虎虎上線試用1個多月了,目前用戶量大概300號左右,租戶大概10家左右。這裏提到一個“新“字,在我沒來到這家公司之前其實已經有自己研發的產品(物流管理系統)在使用了,為什麽還要推翻

多年iOS開發經驗總結(轉)

1、設定UILabel行間距 NSMutableAttributedString* attrString = [[NSMutableAttributedString  alloc] initWithString:label.text];

java專案開發經驗總結

"我自己是一名從事了8年的j a v a全棧開發工程師,辭職目前在做線上教育講師,來了就是我學生,有不懂的可以問我 今年4月我花了一個月整理了一套比較系統適合2018年學習的 j a v a資料,從基礎的面向物件到執行緒, j d b c都有整理,送給每一位小夥伴,這裡是學習者聚集地,如果你

程式碼開發經驗總結

1.開發完成之後按照文件測試每一個功能(注意必須每一個功能都自測到); 2.資料庫設計考慮冗餘 3.無效的列型別: 1111很大可能是欄位型別對不上,看實體類,xml,和資料庫,採用欄位二分排除法排查,還有可能是引數為空 mybatis.configuration.jdbc-type-f

Cef功能開發經驗總結

這是我開發Cef功能時對踩過的坑,進行的總結,話說Cef坑真的不少。好在踩完後用起來還是挺爽的。最終的程式碼可以下載網易雲信PC Demo C++原始碼點我跳轉 資料準備 這是我整合過程中查到的一些資料,包括了Cef開發的各方面資料 在除錯Cef時需要Cef的pdb

iOS開發經驗總結2

整理了下這個幾年的筆記,看到很多的知識點都是iOS7, iOS6,iOS5的,更新換代好快啊。僅僅來回味下常用到基礎點,大神們請繞行。有不對的地方請大家指出,會及時修改。 一、調節UINavigationBar的leftBarButtonItem離左邊的距離 (iOS11 不可用) U

微信小程式開發經驗總結(遇到的坑和問題彙總)

小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 前言: 前段時間公司打算做一款基於線下服務的小程式,涉及到掃碼支付,地圖,充值,會員體系等功能。由於

乾貨分享:十年大廠資深程式設計師的開發經驗總結

本文由騰訊雲加社群整理和釋出,原文連結:cloud.tencent.com/developer/article/1004735,內容有刪減和改動。 1、引言 在網際網路一線做了十年的程式開發,經歷了網易、百度、騰訊研究院、MIG 等幾個地方,陸續做過 3D 遊戲、2D 頁遊、瀏覽器、移動端翻

NDK探究之旅《十》——ndk專案實戰之Androidstudio開發經驗總結

前幾次總結了一下關於C或C++的基礎知識及其開發流程。之前也大部分都是基於Elipse的。今天我們用AndroidStudio來開啟我們的第一個專案實戰。 但是基於AndroidStudio方面,以後趨勢都是AndroidStudio開發NDK的,我們也同樣的

多年大資料開發經驗總結

初入行,搞大資料開發。得高人指點,先學mapreduce,不足一年,tez興,後入此道。朝夕不倦,發憤圖強,才能略知一二。無奈後浪推前浪,tez被spark拍在沙灘上,遂投spark之懷。繼而抖擻精神,奮袂而起,github、stackoverflow輪番上陣,

微信第三方平臺開發經驗總結(五):接收授權方授權請求並儲存授權方資訊

public String queryAuth(String authCode,String expiresIn) {     String componentAccessToken = getComponentAccessToken();//把之前儲存的component_access_token取出來

專案開發經驗總結

1、需求理解要透徹 需求關乎專案要做什麼,要達到什麼樣的結果,對公司開展業務有什麼樣的幫助等,需要在需求階段理解清楚,做到心中有數。另外需求是工作量評估的基礎,要想工作量評估適當且充分,不出現大幅度偏差,就需要客觀理解需求。 2、工作量評估做到群策群力 我們會把整體計劃拆分

我在創業公司的開發經驗總結

本文是流船原創授權本公號分享的他在創業公司的開發經驗,小公司同樣有牛人,大公司同樣有混日子的,不

多年iOS開發經驗總結(一)

總結了幾個月的東西終於能和大家分享了,不多說,直接看東西! 1、禁止手機睡眠 [UIApplication sharedApplication].idleTimerDisabled = YES; 2、隱藏某行cell - (CGFloat)