編輯:關於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 事件中處理。
以前的Android(4.1之前的版本)中,SDcard路徑通過“/sdcard”或者“/mnt/sdcard”來表示,而在JellyBean(安卓4.1)系統中修改為了
2012年11月中旬,Google發布了Android4.2。雖然它和Android 4.1同屬Jelly Bean系列,但卻添加了很多新的功能。其中,在顯示部分,And
定義外觀模式(Facade Pattern):外部與一個子系統的通信必須通過一個統一的外觀對象進行,為子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這
Pausing and Resuming an Activity 暫停和恢復一個activityThis lesson teaches you to 這節課教給你Paus