Android中獲取控件尺寸進階方案

在Android開發中,很多場景都需要獲取控件(View)的寬高信息,比如動態布局調整、動畫效果實現等。然而,直接在ActivityonCreate()中調用控件的getWidth()getHeight()`方法,得到結果卻是0,因為控件還沒完成布局測量。

本文總結了幾種獲取控件大小的實用方法,并對各方法的適用場景和優缺點做了說明,幫助你選擇最適合自己項目的方案。


1. 使用View.post()方法

這是最簡單且常用的方法之一,post()會在控件布局完成后執行代碼,從而確保可以獲得真實尺寸。

val myView = findViewById<View>(R.id.my_view)  myView.post {  val width = myView.width  val height = myView.height  
}  

post會把代碼放到消息隊列,等控件布局完成后執行。


2. 使用 ViewTreeObserver.OnGlobalLayoutListener

val myView = findViewById<View>(R.id.my_view)myView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {override fun onGlobalLayout() {myView.viewTreeObserver.removeOnGlobalLayoutListener(this)val width = myView.widthval height = myView.height}
})

監聽整個視圖樹的布局完成,拿到尺寸后及時移除監聽。


3. 重寫 onWindowFocusChanged(推薦時機)

override fun onWindowFocusChanged

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

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

相關文章

android 輸入系統

一、輸入系統的核心角色與分層架構 Android 輸入系統的本質是橋梁&#xff1a;一端連接硬件驅動產生的原始事件&#xff0c;另一端將事件精準派發給應用窗口。整個過程涉及三層架構和多個關鍵組件&#xff0c;可類比為 “快遞分揀系統”&#xff1a; 1. 硬件與內核層&#xf…

ubuntu中,c和c+程序,預編譯、編譯、鏈接和運行命令

目錄 安裝編譯器一.c編譯運行&#xff08;粗暴簡單&#xff09;1.編寫 C 程序&#xff1a;2. 預處理&#xff1a;3.編譯&#xff1a;4. 匯編&#xff1a;5. 鏈接&#xff1a;6.運行 二.c編譯運行&#xff08;粗暴簡單&#xff09;1.編寫 C 程序&#xff1a;2.預處理&#xff1a…

【FastAPI】--2.進階教程(一)

【FastAPI】--基礎教程-CSDN博客 app.get和post的參數&#xff1a; 參數類型說明pathstr路由路徑&#xff08;如 "/marks"&#xff09;&#xff0c;必填。response_modelType[T]定義響應數據的模型&#xff08;如 percent&#xff09;&#xff0c;會自動校驗和序列…

KT6368A通過藍牙芯片獲取手機時間詳細說明,對應串口指令舉例

一、功能簡介 KT6368A雙模藍牙芯片支持連接手機&#xff0c;獲取手機的日期、時間信息&#xff0c;可以同步RTC時鐘 1、無需安裝任何app&#xff0c;直接使用系統藍牙即可實現 2、同時它不影響音頻藍牙&#xff0c;還支持一些簡單的AT指令進行操作 3、實現的方式&#xff1…

【平面波導外腔激光器專題系列】用于光纖傳感的低噪聲PLC外腔窄線寬激光器

----翻譯自Mazin Alalusi等人的文章 摘要 高性價比的 1550 nm DWDM平面外腔 &#xff08;PLANEX&#xff09; 激光器是干涉測量、布里淵、LIDAR 和其他光傳感應用的最佳選擇。其線寬<3kHz、低相位/頻率噪聲和極低的RIN。 簡介 高性能光纖分布式傳感技術是在過去幾年中開發…

企業微信內部網頁開發流程筆記

背景 基于ai實現企微側邊欄和工作臺快速問答小助&#xff0c;需要h5開發&#xff0c;因為流程不清楚摸索半天&#xff0c;所以記錄一下 一、網頁授權登錄 1. 配置步驟 1.1 設置可信域名 登錄企業微信管理后臺 進入"應用管理" > 選擇開發的具體應用 > “網…

WORD 轉 PDF 工具:排版 / 圖片 / 表格批量轉換提升辦公效率

各位辦公小能手們&#xff0c;今天來聊聊文檔工具里的WORD轉PDF工具&#xff01;這玩意兒到底是干啥的呢&#xff1f;咱來好好說道說道。 先說核心功能。第一個就是格式轉換&#xff0c;能把Word文檔轉換成PDF&#xff0c;不管是格式、排版&#xff0c;還是圖片、表格啥的&…

從逆流監測到智慧用電:ADL200N-CT系列單相導軌表賦能家庭綠色能源

在新能源浪潮席卷全球的當下&#xff0c;陽臺光伏以及家庭儲能&#xff08;戶儲&#xff09;系統逐漸成為眾多追求綠色生活、渴望實現能源自主家庭的新選擇。它不僅能有效利用太陽能等清潔能源&#xff0c;還能在用電高峰時段為家庭提供穩定電力支持&#xff0c;降低用電成本。…

std::thread的說明與示例

源于通義千問 在 C 中&#xff0c;std::thread 支持傳遞多種類型的函數作為線程入口點。你可以傳遞普通函數、類的成員函數、Lambda 表達式、函數對象&#xff08;仿函數&#xff09;等。以下是詳細的說明和示例。 1. 傳遞普通函數 普通函數是最簡單的用法。 示例 #include…

【Day38】

DAY 38 Dataset和Dataloader類 對應5. 27作業 知識點回顧&#xff1a; Dataset類的__getitem__和__len__方法&#xff08;本質是python的特殊方法&#xff09;Dataloader類minist手寫數據集的了解 作業&#xff1a;了解下cifar數據集&#xff0c;嘗試獲取其中一張圖片 import …

RabbitMQ 集群與高可用方案設計(三)

五、高可用方案設計與實現 &#xff08;一&#xff09;負載均衡與代理 1. HAProxy 配置 HAProxy 是一款廣泛應用的開源負載均衡器和代理服務器&#xff0c;它能夠實現對 RabbitMQ 集群節點的負載均衡和健康檢查&#xff0c;有效提高系統的可用性和性能。以下是使用 HAProxy …

機器學習第二十四講:scikit-learn → 機器學習界的瑞士軍刀

機器學習第二十四講&#xff1a;scikit-learn → 機器學習界的瑞士軍刀 資料取自《零基礎學機器學習》。 查看總目錄&#xff1a;學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章&#xff1a;DeepSeek R1本地與線上滿血版部署&#xff1a;超詳細手把手指南 Scikit-…

百度ocr的簡單封裝

百度ocr地址 以下代碼為對百度ocr的簡單封裝,實際使用時推薦使用baidu-aip 百度通用ocr import base64 from enum import Enum, unique import requests import logging as logunique class OcrType(Enum):# 標準版STANDARD_BASIC "https://aip.baidubce.com/rest/2.0…

Ubuntu20.04 gr-gsm完整安裝教程

gr-gsm完整安裝教程 安裝gnuradio3.8安裝依賴項指定gnuradio源安裝gnuradio 安裝gr-gsm安裝依賴項安裝gr-gsm修改環境變量 安裝成功 安裝gnuradio3.8 安裝依賴項 sudo apt install git cmake g libboost-all-dev libgmp-dev swig python3-numpy python3-mako python3-sphinx …

(自用)Java學習-5.15(模糊搜索,收藏,購物車)

1. 模糊搜索商品功能 前端實現&#xff1a; 通過解析URL參數&#xff08;如search聯想&#xff09;獲取搜索關鍵字&#xff0c;發送AJAX GET請求到后端接口/product/searchGoodsMessage。 動態渲染搜索結果&#xff1a;若結果非空&#xff0c;循環遍歷返回的商品數據&#xff…

STM32 TIM 定時器深度剖析:結構、時基、中斷與應用開發(超形象詳解)

文章目錄 定時器&#xff08;TIM&#xff09;定時器種類與分布定時器的基本結構時基單元時基單元基本結構計數器計數方向時基單元時鐘來源計算寄存器預加載機制 自制延時函數獲取單片機當前時間實現延遲函數初始化定時器3的時基單元配置中斷編寫中斷響應函數測試延遲函數 定時器…

Java使用minio上傳整個目錄下的所有內容

目錄 1、添加相關配置 2、添加依賴 3、實現方法 1??基礎版&#xff1a; 2??優化版&#xff08;推薦使用&#xff09;&#xff1a; 3??上傳遠程主機上的目錄內容&#xff1a; 4??直接上傳遠程主機中的目錄內容 業務背景&#xff1a;需要需要minio進行上傳指定目錄下所有…

Python的分布式網絡爬蟲系統實現

1. 系統架構概述 一個典型的分布式網絡爬蟲系統通常包含以下幾個核心組件&#xff1a; 1.主節點&#xff08;Master Node&#xff09;&#xff1a; 任務調度&#xff1a;負責將抓取任務分配給各個工作節點。URL 管理&#xff1a;維護待抓取的 URL 隊列和已抓取的 URL 集合&a…

AI工具的選擇:Dify還是傳統工具?

從純技術視角出發&#xff0c;選擇Dify還是傳統開發工具需要基于六個核心維度進行理性決策。以下為結構化分析框架&#xff0c;附典型場景示例&#xff1a; 1. 開發效率 vs 控制力權衡矩陣 維度Dify優勢場景傳統工具優勢場景迭代速度需求明確的標準CRUD&#xff08;如后臺管理…

2.3 TypeScript 非空斷言操作符(后綴 !)詳解

在 TypeScript 中&#xff0c;當你開啟了嚴格的空值檢查&#xff08;strictNullChecks&#xff09;后&#xff0c;變量如果可能是 null 或 undefined&#xff0c;就必須在使用前進行顯式的判斷。為了在某些場景下簡化代碼&#xff0c;TypeScript 提供了非空斷言操作符&#xff…