日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )

發布時間:2025/6/17 Android 30 豆豆

Android TV 開發系列文章目錄

【Android TV 開發】安卓電視調試 ( 開啟網絡遠程調試 )
【Android TV 開發】焦點處理 ( 父容器與子組件焦點獲取關系處理 | 不同電視設備上的兼容問題 | 觸摸獲取焦點 | 按鍵獲取焦點 )


文章目錄

  • Android TV 開發系列文章目錄
  • 一、父容器與子組件焦點獲取關系處理
  • 二、不同電視設備上的兼容問題
  • 三、按鍵獲取焦點
  • 四、觸摸獲取焦點





一、父容器與子組件焦點獲取關系處理



在布局文件中 , 父容器的節點中使用 android:descendantFocusability 屬性 , 用于設置 父容器 子組件 之間的 焦點獲取先后順序 ;

<ScrollViewandroid:descendantFocusability="afterDescendants"android:layout_width="match_parent"android:layout_height="match_parent"></ScrollView>

android:descendantFocusability 屬性取值 :

① beforeDescendants : 父容器 優先獲取焦點 , 如果父容器不需要焦點 , 子組件才能獲取到焦點 ;

② afterDescendants : 子組件 優先獲取焦點 , 如果子組件不需要獲取焦點 , 則父容器獲取焦點 ;

③ blocksDescendants : 只有 父容器 能獲取焦點 , 子組件不能獲取焦點 ;





二、不同電視設備上的兼容問題



在開發時遇到這樣一種情況 , 布局的樣式是 ScrollView 中嵌入一個 ConstraintLayout 布局 , 在 ConstraintLayout 布局中設置了很多需要獲取焦點的子組件 ;

運行正常的情況 : 在 Google 提供的模擬器上運行時 , 正常運行 , ScrollView 的子組件中可以正常獲取焦點 ;

運行失敗的情況 : 但是在真實的國產電視盒子中 , ScrollView 始終組織其子組件獲取焦點 , 即使設置了 android:descendantFocusability=“afterDescendants” , 子組件也無法獲取焦點 ;


最終的解決方案 : 在子組件中 , 將需要獲取焦點的組件都添加 android:focusable=“true” 屬性 , 這樣就解決了上述問題 ;


由此可見 , 相同的代碼 , 在不同型號 , 版本 , 廠家 的電視設備上 , 焦點的獲取 , 移動 , 表現是不一樣的 , 因此這里就涉及到了焦點的兼容問題 ;


本次在 康佳 電視盒子中 , ScrollView 會阻斷子組件的焦點獲取 , 但是在其它界面 , 沒有添加 android:focusable=“true” 屬性 , 焦點獲取功能也可以正常使用 , 這就比較難受 ;


這里建議 : 為了適配盡可能多的電視設備 , 推薦如下做法 :

① 設置可獲取焦點 :需要獲取焦點的組件 , 統一添加 android:focusable="true" 屬性 ;

② 設置不可獲取焦點 : 凡是 不需要獲取焦點的組件 , 統一添加 android:focusable="false" 屬性 ;

③ 設置組件兼容 : 凡是涉及到 父容器子組件 之間的焦點獲取的情況 , 統一使用 android:descendantFocusability 屬性 ;





三、按鍵獲取焦點



按鍵獲取焦點 : 在手機上按鍵獲取焦點已經不常用 , 使用遙控器 / 手柄 控制界面需要關注該操作 ;

在 xml 布局文件中 , 在組件節點上設置如下屬性 , 取值 true 或 false ;

android:focusable="true"

按鍵獲取焦點 一般是手機自帶的物理鍵盤 , D-Pad 遙控器 ( 電視遙控器 ) , 游戲手柄 等 , 使用方向鍵 , 控制焦點改變 ;

如果該 android:focusable 屬性設置為 true , 則說明該組件可以獲取焦點 , 按照不同的方向按鍵 , 焦點跳轉到本組件設定的對應方向上的件 id 對應的組件 ;





四、觸摸獲取焦點



觸摸獲取焦點 : 目前的觸摸屏手機控制焦點的主流操作 ;

在 xml 布局文件中 , 在組件節點上設置如下屬性 , 取值 true 或 false ;

android:focusableInTouchMode="true"

Button , TextView , 布局組件 , 等默認沒有觸摸焦點 , 因為這些組件可能用于點擊事件 , 如果這些組件可獲取焦點 , 用戶點擊這些組件后 , 要先獲取焦點 , 觸發 OnFocusChangeListener 回調 , 獲取焦點后才能進行點擊 ;

EditText 默認自動獲取焦點 , 并且進入界面搶先獲取焦點 , 該組件需要有光標 , 并且彈出軟鍵盤 ;

總結

以上是生活随笔為你收集整理的【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。