Android TV 焦點上下左右移動

 第一種方法:採用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; 
                      Layout2中被選中的ImageButton爲mSenondImgBtn, 序號爲mSenondIndx;  
                      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 事件中處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章