對焦點的處理是Android 電視開發與手機開發最大的區別之一。在手機上,關于焦點我們幾乎不需要做額外的處理;而在電視機上則需要做大量的處理,如:焦點的顯示樣式(顏色、大小等)、焦點的導航、顯示動畫等。
focusable與focusableInTouchMode
在xml中對view設置屬性:
android:focusable="true"
android:focusableInTouchMode="true"
動態設置:
View.setFocusable(true);
View.setFocusableInTouchMode(true)
上述屬性focusable設置為true時當前控件才能獲得焦點;反之,不能獲得焦點。focusableInTouchMode用于設置是否可以通過觸摸獲取焦點。在手機應用開發中一般不需要對上述屬性進行設置,電視應用很有必要,因為電視通常是通過遙控器來控制焦點的(也可以是鼠標)。
requestFocus
動態設置:
View.requestFocus();
xml中:
<requestFocus />
為控件設置焦點,通常會優先獲取焦點(可能某些控件會搶奪焦點,如EditText)。打開頁面時,通常會使用它來決定誰優先獲得焦點。
descendantFocusability
當焦點獲取出現問題是你可以嘗試設置descendantFocusability屬性 ,有以下三中值:
beforeDescendants:viewgroup會優先其子類控件而獲取到焦點
afterDescendants:viewgroup只有當其子類控件不需要獲取焦點時才獲取焦點
blocksDescendants:viewgroup會覆蓋子類控件而直接獲得焦點
建議簡化布局層級,層級過多會導致焦點處理變得復雜,也很難實現特殊的焦點選中效果。