当前位置: 首页 > news >正文

android 在onCreate方法中获得view的宽高

view在绘制完成后才会有自己的宽高,所以在onCreate中要获得view的宽高可以通过以下4中方法:

1、ViewTreeObserver:监听界面绘制事件,在layout时调用,使用完毕后记得removeListener

2、view.post,因为runnable对象会在view的measure、layout后触发

3、重写onLayout方法

4、使用getMeasuredWidth、getMeasuredHeight获得测量后的宽高,可能跟view的真实宽高有差距

当Activity创建时,需要获取某个View的宽高,然后进行相应的操作,但是我们在onCreate,onStart中获取View的大小,获取到的值都是0,只是由于View的绘制工程还未完成,和在onCreate中弹出Dialog或者PopupWindow会报一个Activity not running原理类似。

第一种:重写Activity中的onWindowFocusChanged,当Activity获取到焦点的时候View已经绘制完成,也能获取到View的准确宽高了。同样的Dialog和PopupWindow也可以在这里弹出,需要注意的是这个方法会调用多次,当hasFocus为true时,才可进行相应的操作

  1. </pre><pre name="code" class="java">@Override

  2. public void onWindowFocusChanged(boolean hasFocus) {

  3. super.onWindowFocusChanged(hasFocus);

  4. if (hasFocus) {

  5. System.out.println("onWindowFocusChanged width="

  6. + tvTest.getWidth() + " height=" + tvTest.getHeight());

  7. }

  8. }

第二种:

/**

  1. * 会执行多次

  2. */

  3. private void getSize1() {

  4. ViewTreeObserver vto = tvTest.getViewTreeObserver();

  5. vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

  6. @Override

  7. public boolean onPreDraw() {

  8. int height = tvTest.getMeasuredHeight();

  9. int width = tvTest.getMeasuredWidth();

  10. System.out.println("height" + height);

  11. System.out.println("width" + width);

  12. return true;

  13. }

  14. });

  15. }


第三种:

private void getSize2() {

  1. ViewTreeObserver viewTreeObserver = tvTest.getViewTreeObserver();

  2. viewTreeObserver

  3. .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

  4. @Override

  5. public void onGlobalLayout() {

  6. tvTest.getViewTreeObserver()

  7. .removeGlobalOnLayoutListener(this);

  8. System.out.println("onGlobalLayout width="

  9. + tvTest.getWidth() + " height="

  10. + tvTest.getHeight());

  11. }

  12. });

  13. }

第四种:

  1. private void getSize3() {

  2. tvTest.post(new Runnable() {

  3. @Override

  4. public void run() {

  5. System.out.println("postDelayed width=" + tvTest.getWidth()

  6. + " height=" + tvTest.getHeight());

  7. }

  8. });

  9. }

相关文章:

android 在onCreate方法中获得view的宽高

view在绘制完成后才会有自己的宽高&#xff0c;所以在onCreate中要获得view的宽高可以通过以下4中方法&#xff1a; 1、ViewTreeObserver&#xff1a;监听界面绘制事件&#xff0c;在layout时调用&#xff0c;使用完毕后记得removeListener 2、view.post&#xff0c;因为runn…...

SOA主要协议和规范

Web服务作为实现SOA中服务的最主要手段。首先来了解Web Service相关的标准。它们大多以“WS-”作为名字的前缀&#xff0c;所以统称“WS-*”。Web服务最基本的协议包括UDDI、WSDL和SOAP&#xff0c;通过它们&#xff0c;可以提供直接而又简单的Web Service支持&#xff0c;如图…...

30、matlab现代滤波:维纳滤波/LMS算法滤波/小波变换滤波

1、信号1和信号2的维纳滤波 实现代码 N 2000; %采样点数 Fs 2000; %采样频率 t 0:1 / Fs:1 - 1 / Fs; %时间序列 Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t); Signal2[2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1…...

HTML5 视频 Vedio 标签详解

HTML5 引入了 <video> 标签&#xff0c;允许开发者在网页中直接嵌入视频文件&#xff0c;而不需要依赖第三方插件。本文将全面介绍 <video> 标签的各种属性&#xff0c;并通过实例代码详细说明其用法。 一、基础用法 1. 基本结构 HTML5 中使用 <video> 标…...

三十五篇:数字化转型的引擎:赋能企业的ERP系统全景

数字化转型的引擎&#xff1a;赋能企业的ERP系统全景 1. 引言 在这个快速变化的数字时代&#xff0c;现代企业面临着前所未有的挑战和机遇。企业资源计划&#xff08;ERP&#xff09;系统&#xff0c;作为数字化转型的核心&#xff0c;扮演着至关重要的角色。它不仅是企业运营…...

利用ArcGIS对长江三角洲地区的gdp水平进行聚类

1、导入矢量图、数据 长三角地区矢量图 长三角地区矢量图对应数据 2、连接 3、设置属性将人均gdp数据导入 4、设置标注和图例 选择布局视图 5、聚类 2020年人均gdp地区聚类 6、2005~2020年各地区人均gdp可视化及聚类汇总 &#xff08;1&#xff09;2005~2020可视化 2005 …...

释放视频潜力:Topaz Video AI for mac/win 一款全新的视频增强与修复利器

在数字时代&#xff0c;视频已经成为我们记录生活、分享经历的重要方式。然而&#xff0c;有时候我们所拍摄的视频可能并不完美&#xff0c;可能存在模糊、噪点、抖动等问题。这时候&#xff0c;就需要一款强大的视频增强和修复工具来帮助我们提升视频质量&#xff0c;让它们更…...

MongoDB 正则表达式详解:高效数据查询与处理技巧

MongoDB 的正则表达式&#xff08;Regular Expression&#xff09;功能允许在查询中进行模式匹配和文本搜索&#xff0c;为用户提供了强大的灵活性。 基本语法 MongoDB 中使用正则表达式时&#xff0c;通常是在查询语句中使用 $regex 操作符。基本语法如下&#xff1a; { &l…...

第二十六章HTML与CSS书写规范

1.HTML书写规范 1.文档类型声明及编码 统一为html5 声明类型。编码统一为utf-8。 2.页面tdk TDK是一个缩写&#xff0c;其中“T”表示为网页定义标题&#xff0c;“D”表示为网页定义描述 description&#xff0c;“K”表示为搜索引擎定义关键词keywords。 1、<title&g…...

基于FPGA的AD5753(DAC数模转换器)的控制 II(SPI驱动)

基于FPGA的AD5753&#xff08;DAC数模转换器&#xff09;的控制 II&#xff08;已上板验证&#xff09; 语言 &#xff1a;Verilg HDL EDA工具&#xff1a;Vivado 基于FPGA的AD5753&#xff08;DAC数模转换器&#xff09;的控制 II&#xff08;已上板验证&#xff09;一、引言二…...

【全开源】Java同城服务同城信息同城任务发布平台小程序APP公众号源码

&#x1f4e2; 连接你我&#xff0c;让任务触手可及 &#x1f31f; 引言 在快节奏的现代生活中&#xff0c;我们时常需要寻找一些便捷的方式来处理生活中的琐事。同城任务发布平台系统应运而生&#xff0c;它为我们提供了一个高效、便捷的平台&#xff0c;让我们能够轻松发布…...

[Redis]List类型

列表类型来存储多个有序的字符串&#xff0c;a、b、c、d、e 五个元素从左到右组成了一个有序的列表&#xff0c;列表中的每个字符串称为元素&#xff0c;一个列表最多可以存储个元素。在 Redis 中&#xff0c;可以对列表两端插入&#xff08;push&#xff09;和弹出&#xff08…...

export 和 export default 的区别

在 JavaScript 中&#xff0c;export 和 export default 都是用于导出模块中的内容的关键字&#xff0c;但它们有一些区别&#xff1a; export: export 关键字用于导出多个变量、函数或对象。可以一次导出多个内容&#xff0c;并且在导入时需要使用对应的名称。例如&#xff1a…...

29网课交单平台 epay.php SQL注入漏洞复现

0x01 产品简介 29网课交单平台是一个专注于在线教育和知识付费领域的交单平台。该平台基于PHP开发,通过全开源修复和优化,为用户提供了高效、稳定、安全的在线学习和交易环境。作为知识付费系统的重要组成部分,充分利用了互联网的优势,为用户提供了便捷的支付方式、高效的…...

推荐ChatGPT4.0——Code Copilot辅助编程、Diagrams: Show Me绘制UML图、上传PDF并阅读分析

5月14日凌晨1点、太平洋时间的上午 10 点&#xff0c;OpenAI的GPT-4o的横空出世&#xff0c;再次巩固了其作为行业颠覆者的地位。GPT-4o的发布不仅仅是一个产品的揭晓&#xff0c;它更像是向世界宣告AI技术已迈入了一个全新的纪元&#xff0c;连OpenAI的领航者萨姆奥特曼也不禁…...

rollup.js(入门篇)

前沿 Rollup 是一个用于 JavaScript 的模块打包工具&#xff0c;它将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许…...

【Spring Cloud Alibaba】开源组件Sentinel

目录 什么是Sentinel发展历史与Hystrix的异同 Sentinel可以做什么&#xff1f;Sentinel的功能Sentinel的开源生态Sentinel的用户安装Sentinel控制台预备环境准备Sentinel 分为两个部分:下载地址 项目集成Sentinel创建项目修改依赖信息添加启动注解添加配置信息在控制器类中新增…...

Android14 WMS-窗口绘制之relayoutWindow流程(一)-Client端

Android14 WMS-窗口添加流程(一)-Client端-CSDN博客 Android14 WMS-窗口添加流程(二)-Server端-CSDN博客 经过上述两个流程后&#xff0c;窗口的信息都已经传入了WMS端。 1. ViewRootImpl#setView 在窗口添加流程(一)中&#xff0c;有这个方法&#xff1a; http://aospxref…...

JVM学习-Jprofiler

JProfiler 基本概述 特点 使用方便&#xff0c;界面操作友好对被分析的应用影响小(提供模板)CPU&#xff0c;Tread&#xff0c;Memory分析功能尤其强大支持对jdbc,noSql,jsp,servlet,socket进行分析支持多种模式(离线、在线)的分析支持监控本地、远程JVM跨平台&#xff0c;拥…...

Skins

本主题解释如何将DevExpress主题/皮肤应用到应用程序中&#xff0c;如何允许用户在运行时在主题之间切换&#xff0c;如何自定义现有皮肤或创建自己的皮肤&#xff0c;等等。 WinForms订阅包括许多基本控件&#xff1a;按钮、复选框、表单、消息框、对话框、对话框等。 我们实现…...

告别笨重模拟器:Windows系统上直接安装APK的终极方案

告别笨重模拟器&#xff1a;Windows系统上直接安装APK的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经为了在电脑上运行一个简单的手机应用而不得…...

避开这些坑!在Colab上运行AlphaFold2时,参数、路径和依赖库的常见错误排查指南

避开这些坑&#xff01;在Colab上运行AlphaFold2时&#xff0c;参数、路径和依赖库的常见错误排查指南 在Google Colab上运行AlphaFold2看似简单&#xff0c;但实际操作中90%的用户都会遇到各种"诡异"报错。上周一位结构生物学博士向我吐槽&#xff1a;"明明按照…...

照片元数据管理终极指南:3步告别繁琐手动操作

照片元数据管理终极指南&#xff1a;3步告别繁琐手动操作 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾因数百张照片的拍摄时间错误而头痛不已&#xff1f;是否在为大量图片添加版权信息时感到力…...

终极指南:如何用React JSON Schema Form快速构建专业表单设计语言

终极指南&#xff1a;如何用React JSON Schema Form快速构建专业表单设计语言 【免费下载链接】react-jsonschema-form A React component for building Web forms from JSON Schema. 项目地址: https://gitcode.com/gh_mirrors/re/react-jsonschema-form React JSON Sc…...

ARM GICv3虚拟中断控制器与ICH_LR寄存器详解

1. ARM GICv3虚拟中断控制器架构概述 在现代计算机系统中&#xff0c;中断控制器是管理硬件中断的核心组件。ARM架构的通用中断控制器&#xff08;Generic Interrupt Controller&#xff0c;GIC&#xff09;经过多代演进&#xff0c;GICv3版本引入了对虚拟化的全面支持。虚拟化…...

LLM Workflow Engine:命令行AI工作流引擎的架构与实战

1. 项目概述&#xff1a;从命令行到工作流&#xff0c;一个LLM引擎的进化如果你和我一样&#xff0c;是个重度命令行用户&#xff0c;同时又对大型语言模型&#xff08;LLM&#xff09;的潜力着迷&#xff0c;那你肯定经历过这种纠结&#xff1a;想快速用GPT-4验证一个想法&…...

物联网安全认证:X.509证书的局限与替代方案实战解析

1. 项目概述&#xff1a;当X.509证书认证在IoT安全中“失灵”的深度剖析几年前&#xff0c;一份在DEFCON大会上披露的论文揭示了一个令人震惊的事实&#xff1a;互联网上存在大量未受保护的MQTT代理服务器。这些“门户大开”的代理&#xff0c;结合MQTT协议本身允许使用通配符订…...

KG与LLM:大模型时代的智能规划

这些文章给出的“推荐思路”可以浓缩成一句话 先用 Planner 产出 subgoal dependency acceptance criteria。再让 Router 判断每个子任务该走 向量RAG、KG、数据库还是工具。对需要关系、多跳、时序、因果的问题&#xff0c;用 KG / event graph 做结构化检索&#xff0c;而…...

AI意识与认知操控:技术伦理、风险与治理框架

1. 项目概述&#xff1a;当“意识”成为可编程对象最近几年&#xff0c;我身边不少从事AI研发的朋友&#xff0c;聊天时的话题已经从“模型精度又提升了几个点”逐渐转向了一些更“虚”但更根本的问题。比如&#xff0c;我们训练的大语言模型&#xff0c;在和我们进行几轮深度对…...

Harbor:统一管理MCP服务器,告别AI助手配置混乱

1. 项目概述&#xff1a;Harbor&#xff0c;一个管理MCP服务器的统一中心如果你和我一样&#xff0c;在日常开发中深度依赖Claude、Cursor这类AI编程助手&#xff0c;那你一定对MCP&#xff08;Model Context Protocol&#xff09;服务器不陌生。简单来说&#xff0c;MCP服务器…...