view的getWidth() getHeight() 总是返回0 的几种解决方法

2023-10-30

当我们在oncreate 调用 getwith() 与 getheigh()时返回0 的原因是我们的view 在此时还没有绘制出来,不光在oncreate .Activity生命周期中,onStart,onResume,onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。
所以一个解决方法:
就是将 getwith放到onWindowFocusChanged()中。这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候 就会就会被调用。

另一个方法是在oncreate 注册一个viewTreeObserver的监听器,监听view的绘制情况。这是一个注册监听视图树的观察者(observer),在视图树种全局事件改变时得到通知。这个全局事件不仅还包括整个树的布局,从绘画过程开始,触摸模式的改变等。ViewTreeObserver不能够被应用程序实例化,因为它是由视图提供。

他提供了很多监听器,具体见:http://www.cnblogs.com/xingfuzzhd/archive/2013/06/25/3154674.html
我们这里用下面这个就行:

//这种可以在外层布局完成时动态加载里面的布局
        /**out_layout是img_barde,tv_title,img_author,的外层layout,在外层布局加载完成后根据img_barde,tv_title的高宽动态绘制img_author的布局*/
        ViewTreeObserver viewTreeObserver = out_layout.getViewTreeObserver();  
        /**注册一个回调函数,当一个视图树将要绘制时调用这个回调函数。
            *参数 listener    将要被添加的回调函数
            *异常 IllegalStateException       如果isAlive() 返回false
            */
        viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {

                if (!hasMeasured) {
                    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout
                            .LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
                    layoutParams.setMargins(0, img_bar.getHeight() + tv_title.getHeight(), 0, 0);
                    img_author.setLayoutParams(layoutParams);
                    hasMeasured = true;
                }
                return true;
            }
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

view的getWidth() getHeight() 总是返回0 的几种解决方法 的相关文章

随机推荐

  • spring注解:@Autowired、@Qualifier、@Primary

    Autowired 默认情况下 Autowired 按类型装配 Spring Bean 如果容器中有多个相同类型的 bean 则框架将抛出 NoUniqueBeanDefinitionException 以提示有多个满足条件的 bean 进
  • Raki的读paper小记:SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions

    Abstract Introduction Related Work 研究任务 改进大模型遵循指令的能力 SELF INSTRUCT提供了一种几乎无需注释的方法来使预训练语言模型与指令对齐 已有方法和相关工作 许多研究提出使用语言模型进行数
  • Vue 2.0双向绑定原理的实现

    Object defineProperty方法 vue js是采用数据劫持结合发布 订阅者模式的方式 通过Object defineProperty 来劫持各个属性的setter getter 在数据变动时发布消息给订阅者 触发相应的监听回
  • 分布式系统的正确性验证方法

    分布式系统的正确性验证方法 1 Jepsen框架 Jepsen是一个开源的分布式一致性验证框架 可用于验证分布式数据库 分布式消息队列 分布式协调系统 Jepsen探索特定故障模式下分布式系统是否满足一致性 Jepsen框架是一个
  • 用于构建 RESTful Web 服务的多层架构

    文章出自 Bruce Sun Java 架构师 IBM 简介 由于它简便 轻量级以及通过 HTTP 直接传输数据的特性 RESTful Web 服务成为基于 SOAP 服务的一个最有前途的替代方案 在本文中 我们将概述 REST 和 RES
  • 分享63个最常见的前端面试题及其答案

    在前端面试中 各种面试题都会遇到 因此 今天我们整理了60 比较常见繁杂的面试题 希望这些面试题能够对你有所帮助 当然 这些面试题的答案都不是标准答案 只是对答案做了一个简介明了的说明 希望可以快速帮助你梳理重点核心内容 这些答案可以作为参
  • 密码破解---实验八:Windows本地破解用户口令

    目录 一 实验目的及要求 二 实验原理 1 Windows NT 系统密码存储的基本原理 2 SAM的导出方法 三 实验环境 四 实验步骤及内容 五 实验总结 六 分析与思考 一 实验目的及要求 1 了解Windows2000 XP Ser
  • apache服务详解

    APACHE服务 Apache HTTP Server 简称Apache 是Apache软件基金会的一个开放源码的网页服务器 可以在大多数计算机操作系统中运行 由于其多平台和安全性被广泛使用 是最流行的Web服务器端软件之一 它快速 可靠并
  • [机缘参悟-72]:深度思考-人生自省的四重境界:不觉、自觉、觉他、圆满

    前言 人有觉 自觉 觉他 觉行圆满 阐述了人生自省的三重状态 把 不觉 也放入其中 作为在芸芸众生的起点 福 看天下 众生皆苦 从 福 家来看 身体的劳作都算不上真正的苦 福 学中 对于 苦 有不同的认识 可以总结出人世间八大痛苦 此为众生
  • SpringSecurity源码分析(一) SpringBoot集成SpringSecurity即Spring安全框架的加载过程

    Spring Security是一个强大的并且高度可定制化的访问控制框架 它基于spring应用 Spring Security是聚焦于为java应用提供授权和验证的框架 像所有的spring项目一样 Spring Security真正的强
  • osError cannot load library‘Libsndfile.dll‘:error 0x7e

    解决 1 在所给报错路径下 在site packages文件夹下自己创建一个命名为 soundfile data的文件夹 2 下载libsndfile64bit dll文件 下载地址为https github com bastibe lib
  • MySQL8 详细安装步骤 【附安装包】

    一 准备安装包 方式1 云盘 下载 MySQL8 百度云盘下载地址 地址永久有效 链接 https pan baidu com s 1s BH7uizzuwr8P QAJzH4w 提取码 e2xf 方式2 官网下载 MySQL官网下载安装包
  • part2:服务器接收企业微信用户消息

    流程概括 PART1 阿里云服务器配置 购买并配置阿里云服务器 这里选择的是ESC云服务器 centOS7操作系统 配置安全组 开放端口 允许外部访问你的服务器 购买域名并解析到服务器端 申请ssl证书并下载 PART2 远程操作服务器 下
  • js事件 及 事件对象event

    事件类型 鼠标事件 click 点击 dblclick双击 mouseover mouseenter鼠标移入 mouseout mouseleave鼠标离开 onmouseover和onmouseenter的区别 onmouseout和on
  • TCP连接+数据库项目之零碎知识点

    服务器 绑定数据库 和客户端建立连接及传输需要建立的注意点 1 如果要发送结构体中的数据 那么struct中不能使用char 或者string类 因为char 本质上是指针 而指针是通过操作地址来查找数据的 所以服务器接收到的数据只有4个字
  • 2022年最新Vue+electron项目创建

    一 前言 大多数文章都停留在electron vue中 但是这个库不怎么更新了 最近的更新是九月前 看了很多文章都换其他的工具来构建了 这里推荐GITHUB一个大佬写的基于vue cli的插件 构建项目非常简单 插件的GITHUB源代码 话
  • String 类的基本用法及String 类的常见操作

    作者 月亮嚼成星 博客主页 月亮嚼成星 的博客主页 专栏 Java SE基础 工欲善其事必先利其器 给大家介绍一款超牛的斩获大厂offer利器 牛客网 点击免费注册和我一起刷题吧 字符串常见三种构造方式 public class Test
  • STM32-RS485

    RS485 1 RS485基本介绍 1 1RS485特点 1 接口电平低 逻辑 1 用压差为 2 6 V表示 逻辑 0 用压差 2 6 V表示 2 传输速率高 10m时 最高速率可达35Mbps 在1200m时 速率可达100Kbps 3
  • NSSCTF之Misc篇刷题记录⑨

    NSSCTF之Misc篇刷题记录 GKCTF 2021 签到 NISACTF 2022 bmpnumber 领航杯江苏省赛 2021 签到题 鹤城杯 2021 Misc2 鹤城杯 2021 A MISC GXYCTF 2019 CheckI
  • view的getWidth() getHeight() 总是返回0 的几种解决方法

    当我们在oncreate 调用 getwith 与 getheigh 时返回0 的原因是我们的view 在此时还没有绘制出来 不光在oncreate Activity生命周期中 onStart onResume onCreate都不是真正v