1. 程式人生 > >一步一步學習Android TV/盒子開發(一)

一步一步學習Android TV/盒子開發(一)

寫在前面的話:

本人做了幾年的機頂盒和Android電視上的應用開發,寫這些文章只是為了讓初次接觸大屏開發的同學能夠快速上手。

TV端因為沒有觸控操作,只有遙控操作,所以焦點處理、控制以及按鍵監聽是其主要特點。

焦點處理

設定可獲取焦點

佈局中需要設定某個控制元件可獲取焦點需要加上:

android:focusable="true"

程式碼中:

view.setFocusable(true);

焦點監聽

view.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            // 獲取焦點時操作,常見的有放大、加邊框等
        } else {
            // 失去焦點時操作,恢復預設狀態
        }
    }
});

在已知其他View ID的情況下設定下一個焦點:

佈局檔案中:

 android:nextFocusDown="@id/button1"
 android:nextFocusUp="@id/button2"
 android:nextFocusLeft="@id/button3"
 android:nextFocusRight="@id/button4"

程式碼中:

 view.setNextFocusDownId(R.id.button1);
 view.setNextFocusUpId(R.id.button2);
 view.setNextFocusLeftId(R.id.button3);
 view.setNextFocusRightId(R.id.button4);

按鍵監聽

Activity中有onKeyDown(…),可以攔截按鍵處理相關操作,如按兩次返回鍵退出等。

View獲取焦點後捕獲按鍵的方式如下:

view.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                // 這種情況就是當按下遙控器返回鍵時
                return true;
            }
            return false;
        }
    });

常用的遙控器按鍵:

KeyEvent.KEYCODE_BACK // 返回鍵
KeyEvent.KEYCODE_DPAD_DOWN // 下鍵
KeyEvent.KEYCODE_DPAD_UP // 上鍵
KeyEvent.KEYCODE_DPAD_LEFT // 左鍵
KeyEvent.KEYCODE_DPAD_RIGHT // 右鍵
KeyEvent.KEYCODE_MENU // 選單鍵
KeyEvent.KEYCODE_SETTINGS // 設定鍵

跟手機開發一樣,HOME鍵監聽不到