Android TV端彈出的PopupWindow沒有獲取焦點

在 TV 開發中,焦點管理是通過 Focus Navigation 實現的,PopupWindow 默認不接受焦點,導致遙控器無法選擇彈窗內的控件。這是因為 PopupWindow 默認不會將焦點傳遞到其內容視圖上。

要解決問題,可以通過以下步驟調整 PopupWindow 的焦點行為。


解決方法

1. 設置 PopupWindow 可聚焦并允許其內容獲取焦點

確保 PopupWindowfocusable 屬性為 true,并強制讓其內容視圖可以獲取焦點。

BasePopupWindow 的構造函數中添加以下代碼:

setFocusable(true); // 允許 PopupWindow 獲取焦點
setOutsideTouchable(false); // 禁止點擊外部關閉(可選,根據需求調整)

完整代碼修改:

public BasePopupWindow(Context context, int layoutResId, int width, int height, boolean focusable) {super(width, height, focusable);binding = DataBindingUtil.inflate(LayoutInflater.from(context), layoutResId, null, false);setContentView(binding.getRoot());setBackgroundDrawable(new ColorDrawable(0x00000000)); // 默認背景透明setFocusable(true); // 確保彈窗獲取焦點setOutsideTouchable(false); // 避免點擊外部時關閉,保證焦點initialize(); // 子類實現具體邏輯
}

2. 強制請求焦點到彈窗的內容

LogoutPopupWindowinitialize 方法中,調用 requestFocus() 將焦點移動到彈窗的按鈕上。

@Override
protected void initialize() {// 設置動態文案binding.tvMessage.setText(username + ",是否退出登錄?");// 設置按鈕點擊事件binding.btnConfirm.setOnClickListener(v -> {Toast.makeText(binding.getRoot().getContext(), username + "已退出登錄", Toast.LENGTH_SHORT).show();dismissPopup();});binding.btnCancel.setOnClickListener(v -> dismissPopup());// 強制將焦點設置到退出按鈕上binding.btnConfirm.post(() -> binding.btnConfirm.requestFocus());
}

3. 確保布局中的控件支持焦點

popup_logout.xml 中,確保按鈕和其他交互控件明確聲明支持焦點和點擊事件:

<Buttonandroid:id="@+id/btn_confirm"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="退出登錄"android:focusable="true"android:clickable="true"android:backgroundTint="@android:color/holo_red_light"android:textColor="@android:color/white"android:layout_marginTop="8dp" /><Buttonandroid:id="@+id/btn_cancel"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="取消"android:focusable="true"android:clickable="true"android:backgroundTint="@android:color/darker_gray"android:textColor="@android:color/white"android:layout_marginTop="8dp" />

4. 使用 WindowManager.LayoutParams 設置焦點模式

確保 PopupWindow 在顯示時優先處理焦點事件。可以在彈窗顯示時配置 WindowManager.LayoutParams

@Override
public void showAtLocation(View parent, int gravity, int x, int y) {super.showAtLocation(parent, gravity, x, y);getContentView().setFocusable(true); // 內容允許聚焦getContentView().setFocusableInTouchMode(true);
}

完整流程

  1. BasePopupWindow 中:
    • 確保 setFocusable(true)setOutsideTouchable(false)
  2. 在布局文件中:
    • 明確聲明交互控件支持焦點和點擊事件。
  3. initialize() 方法中:
    • 使用 requestFocus() 將初始焦點設置到彈窗內的某個控件。
  4. showAtLocationshowAsDropDown 中:
    • 確保視圖允許焦點和觸摸模式。

完成這些步驟后,彈出的 PopupWindow 就會正確響應 TV 遙控器的焦點導航。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64881.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64881.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64881.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

活動預告 | Microsoft Power Platform 在線技術公開課:實現業務流程自動化

課程介紹 參加“Microsoft Power Platform 在線技術公開課&#xff1a;實現業務流程自動化”活動&#xff0c;了解如何更高效地開展業務。參加我們舉辦的本次免費培訓活動&#xff0c;了解如何借助 Microsoft AI Builder 和 Power Automate 優化工作流。結合使用這些工具可以幫…

FPGA(二)組成結構基礎內容

1. FPGA的基本結構 FPGA主要由以下部分組成&#xff1a; &#xff08;1&#xff09;可編程邏輯單元&#xff08;CLB&#xff09;&#xff1a;CLB是FPGA中最基本的邏輯單元&#xff0c;由查找表&#xff08;LUT&#xff09;和觸發器組成&#xff0c;可實現任意邏輯功能。查找表…

LLM(十二)| DeepSeek-V3 技術報告深度解讀——開源模型的巔峰之作

近年來&#xff0c;大型語言模型&#xff08;LLMs&#xff09;的發展突飛猛進&#xff0c;逐步縮小了與通用人工智能&#xff08;AGI&#xff09;的差距。DeepSeek-AI 團隊最新發布的 DeepSeek-V3&#xff0c;作為一款強大的混合專家模型&#xff08;Mixture-of-Experts, MoE&a…

el-pagination 為什么只能展示 10 條數據(element-ui@2.15.13)

好的&#xff0c;我來幫你分析前端為什么只能展示 10 條數據&#xff0c;以及如何解決這個問題。 問題分析&#xff1a; pageSize 的值&#xff1a; 你的 el-pagination 組件中&#xff0c;pageSize 的值被設置為 10&#xff1a;<el-pagination:current-page"current…

TCP網絡編程(一)—— 服務器端模式和客戶端模式

這篇文章將會編寫基本的服務器網絡程序&#xff0c;主要講解服務器端和客戶端代碼的原理&#xff0c;至于網絡名詞很具體的概念&#xff0c;例如什么是TCP協議&#xff0c;不會過多涉及。 首先介紹一下TCP網絡編程的兩種模式&#xff1a;服務器端和客戶端模式&#xff1a; 首先…

C# 設計模式(行為型模式):責任鏈模式

C# 設計模式&#xff08;行為型模式&#xff09;&#xff1a;責任鏈模式 責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;是一種行為型設計模式&#xff0c;用于讓多個對象有機會處理同一個請求&#xff0c;避免請求發送者與接收者之間的耦合。它通過將請…

在K8S中,如何部署kubesphere?

在Kubernetes集群中&#xff0c;對于一些基礎能力較弱的群體來說K8S控制面板操作存在一定的難度&#xff0c;此時kubesphere可以有效的解決這類難題。以下是部署kubesphere的操作步驟&#xff1a; 操作部署&#xff1a; 1. 部署nfs共享存儲目錄 yum -y install nfs-server e…

CSS系列(43)-- Anchor Positioning詳解

前端技術探索系列&#xff1a;CSS Anchor Positioning詳解 &#x1f3af; 致讀者&#xff1a;探索智能定位的藝術 &#x1f44b; 前端開發者們&#xff0c; 今天我們將深入探討 CSS Anchor Positioning&#xff0c;這個強大的元素定位特性。 基礎概念 &#x1f680; 錨點設…

Python判別不同平臺操作系統調用相應的動態庫讀寫NFC

本示例使用的發卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bV0E4YV&ftt&id615391857885 import sys import struct # struct的pack函數把任意數據類型變成字符串 import ctypes # 調用DLL動態庫要有這個引用if sys.platform…

樹莓派之旅-第一天 系統的燒錄和設置

自言自語&#xff1a; 在此記錄一下樹莓派的玩法。以后有錢了買點來玩啊草 系統的安裝燒錄 系統下載 樹莓派官網&#xff1a;https://www.raspberrypi.com/ 首頁點擊SoftWare進入OS下載頁面 這里是安裝工具&#xff1a;安裝工具負責將系統鏡像安裝到sd卡中 點擊下載符合自己…

商用車自動駕駛,迎來大規模量產「臨界點」?

商用車自動駕駛&#xff0c;正迎來新的行業拐點。 今年初&#xff0c;交通部公開發布AEB系統運營車輛標配征求意見稿&#xff0c;首次將法規限制條件全面放開&#xff0c;有望推動商用車AEB全面標配&#xff0c;為開放場景的商用車智能駕駛市場加了一把火。 另外&#xff0c;…

人工智能及深度學習的一些題目

1、一個含有2個隱藏層的多層感知機&#xff08;MLP&#xff09;&#xff0c;神經元個數都為20&#xff0c;輸入和輸出節點分別由8和5個節點&#xff0c;這個網絡有多少權重值&#xff1f; 答&#xff1a;在MLP中&#xff0c;權重是連接神經元的參數&#xff0c;每個連接都有一…

Solon 加入 GitCode:助力國產 Java 應用開發新飛躍

在當今數字化快速發展的時代&#xff0c;Java 應用開發框架不斷演進&#xff0c;開發者們始終在尋找更快、更小、更簡單的解決方案。近期&#xff0c;Solon 正式加入 GitCode&#xff0c;為廣大 Java 開發者帶來全新的開發體驗&#xff0c;尤其是在國產應用開發進程中&#xff…

VScode 只能運行c,運行不了c++的解決問題

原文鏈接&#xff1a;Vscode只能運行c&#xff0c;運行不了c的解決方法 VScode 只能運行c&#xff0c;運行不了c&#xff0c;怎么回事呢&#xff0c;解決問題&#xff1a; 在tasks.json中加上“"-lstdc"”&#xff0c; 這樣之后 要重啟VScode&#xff0c;點擊鏈接…

Ansible Jinja2 語法簡介及使用

1、Jinja2 介紹 Jinja2 是基于 python 的模板引擎&#xff0c;功能比較類似于 PHP 的 smarty&#xff0c;J2ee 的 Freemarker和velocity。它能完全支持unicode&#xff0c;并具有集成的沙箱執行環境&#xff0c;應用廣泛。 jinja2使用BSD授權 Jinja2的語法是由 variables(變量…

SpringCloud系列教程:微服務的未來 (五)枚舉處理器、JSON處理器、分頁插件實現

在現代 Java 開發中&#xff0c;我們常常需要處理各種通用的功能和需求&#xff0c;諸如枚舉的處理、JSON 數據處理&#xff0c;以及分頁查詢等。這些功能雖然看似簡單&#xff0c;但在實際開發中往往涉及到許多細節和優化。為了提高開發效率、減少重復代碼的編寫&#xff0c;我…

游戲引擎學習第69天

回顧碰撞響應時我們停留的位置 從昨天的討論開始&#xff0c;我們正準備處理碰撞響應的復雜性。具體來說&#xff0c;我們討論的是&#xff0c;當兩個實體在屏幕上發生碰撞時&#xff0c;如何回應這種情況。碰撞本身并不復雜&#xff0c;但要處理其后的反應和規則則更具挑戰性…

【Linux】信號處理

一、Linux系統信號 1、常見的系統信號 常見的Linux系統信號 信號值描述1SIGHUP掛起&#xff08;hang up&#xff09;進程2SIGINT中斷進&#xff08;interrupt&#xff09;程3SIGQUIT停止&#xff08;stop&#xff09;進程9SIGKILL無條件終止&#xff08;terminate&#xff09;…

開源模型應用落地-qwen2-7b-instruct-LoRA微調-Axolotl-單機多卡-RTX 4090雙卡(七)

一、前言 本篇文章將使用Axolotl去高效微調QWen2系列模型,通過閱讀本文,您將能夠更好地掌握這些關鍵技術,理解其中的關鍵技術要點,并應用于自己的項目中。 二、術語介紹 2.1. LoRA微調 LoRA (Low-Rank Adaptation) 用于微調大型語言模型 (LLM)。 是一種有效的自適應策略,…

數據結構與算法學習筆記----快速冪

數據結構與算法學習筆記----快速冪 author: 明月清了個風 first publish time: 2025.1.2 ps??快速冪的兩道模版題&#xff0c;快速冪&#xff0c;乘法逆元&#xff0c;費馬小定理 Acwing 875. 快速冪 [原題鏈接](875. 快速冪 - AcWing題庫) 給定 n n n組 a i , b i , p i…