Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android TV 盒子開發焦點控制

Android TV 盒子開發焦點控制

編輯:關於Android編程

Android TV app開發與一般Android開發最大的區別在於焦點控制 , 用戶在使用Android TV設備主要是通過遙控器操作app。

 

CSDN博客平台看到大牛總結出的2套實用的焦點控制,在此收藏分享:

第一種方法:

采用Android自帶的直接控制焦點上下左右的方法。這種方法的前提是必須知道每個view的id,因此在進行布局時有必須要通過view.setId(…)指定view的特定ID,然後通過view.setNextLeftView(…)等四個方法控制該view的上下左右移動後所到達的view。

第二種方法:

在一些比較復雜的Layout中,特別是涉及到在View的焦點變化的過程中還要控制view的背景以及字體顏色變化等。

比如:在有多個Layout(假設有Layout1, Layout2, Layout3,每個Layout中都有若干個ImageButton),

當你從Layout1中的某個ImageButton 1.1中移動Layout2中ImageButton 2.1,此時ImageButton 1.1要標識為被選中,但是失去焦點,此時ImageButton 2.1是選中並且獲取焦點,再從ImageButton 2.1移到ImageButton 3.1的過程中也是這種情況。

對於這樣一種情況,你必須對每個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也改變獲取焦點背景  
         }

              }
  }

 

還有就是當你當前焦點移動到ImageButton 3.1上時,你有時需要知道此時Layout1、Layout2上是哪個ImageButton 被選中,因此你還必須設置三個ImageButton 變量(標識選中哪個布局中的那個ImageButton 對象),和三個int變量(標識選中哪個布局中的第幾個)。

通過這些標識,你就可以很方便的了解到那個聚焦和哪個失去焦點了。

對於進行上下左右的控制,此時就要在OnKeyDown事件中進行捕獲處理了。由於事先已經知道是哪個Layout中的哪ImageButton被選中了,而此時你進行上下左右操作是在你被選中的View上進行操作的,因此在OnKeyDown中你只需先判斷是哪個View被選中,然後根據按鍵事件來移動View(通過之前設置的int標識進行移動)

(注:由於是即興寫的,可能部分代碼有錯誤,這裡只是描述這個意思,–^_^–)

 

假設Layout1中被選中的ImageButton為mFirstImgBtn, 序號為mFirstIndx;

Layout3中被選中的ImageButton為mThirdImgBtn, 序號為mThirdIndx;

每個Layout裡面的ImageButton均在一個數組中,
假設分別為:ImageButton mImgBtnArray1[], mImgBtnArray2[], mImgBtnArray3[]

 

當前被選中的view為   mSenondImgBtn

       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; 

                     }

       }

而具體的獲焦事件處理則在每個View的 OnFocusChangeListener 事件中處理。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved