首页
学习
活动
专区
圈层
工具
发布

onPreDrawListenter内部的getHeight返回0

onPreDrawListener是Android中的一个接口,用于监听视图树绘制的过程。当视图树将要绘制时,会调用onPreDraw方法,我们可以在该方法中进行一些操作。

在onPreDraw方法中,如果调用了视图的getHeight方法,并且返回值为0,可能有以下几种情况:

  1. 视图尚未完成测量和布局:在视图绘制的过程中,首先会进行测量和布局操作,然后才会进行绘制。如果在onPreDraw方法中调用getHeight方法,而此时视图尚未完成测量和布局,那么返回的高度值就是0。这通常发生在视图第一次绘制时或者在视图的尺寸发生变化时。
  2. 视图的高度确实为0:有些视图确实是没有高度的,比如一个空的LinearLayout或者一个没有内容的TextView。在这种情况下,调用getHeight方法返回0是正常的。

为了解决这个问题,可以采取以下几种方法:

  1. 使用ViewTreeObserver来监听视图的绘制完成事件,而不是在onPreDraw方法中获取高度。可以通过ViewTreeObserver的addOnGlobalLayoutListener方法来监听视图的布局完成事件,然后在回调方法中获取视图的高度。
  2. 在合适的时机获取视图的高度。可以在视图的生命周期方法中获取高度,比如在onResume方法中或者在视图的回调方法中。
  3. 确保视图已经完成测量和布局。可以通过调用视图的measure和layout方法来确保视图已经完成测量和布局,然后再获取高度。

总结:onPreDrawListener内部的getHeight返回0可能是因为视图尚未完成测量和布局,或者视图的高度确实为0。为了解决这个问题,可以使用ViewTreeObserver来监听视图的绘制完成事件,或者在合适的时机获取视图的高度,确保视图已经完成测量和布局。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java内部类的作用(一)----解决函数参数返回的问题

我们知道一个函数只有一个返回值,如果当返回很多数据的时候,这个返回值是需要处理的,也就是返回值的类型(数组或者自定义类来解决) 当我们要处理做一个处理的时候,需要返回两个以上的参数的时候...,就可以用内部类解决这个问题 而如果此时这个作为返回值的内部类不需要引用外围类对象的话,就可以加上STATIC  静态内部类  取消产生内部类的作用 因为内部类对象总有一个隐式引用,它指向了创建它的外部对象...也就是有这样一个特性: 静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他所有内部类完全一样 接下来我们看看java技术核心提供的代码: 内部类: package org.innerclass.operate...main(String[] args) { // TODO Auto-generated method stub double[] d = new double[20]; for(int i =0;...,因为外部类对象是在静态方法中构造这个内部类的对象的。

1.6K20
  • ScalaPB(0): 找寻合适的内部系统微服务集成工具

    虽然Cassandra和MongoDB是分布式的,但也只限在它们已部署的不同节点上自由交流。现在看来,不同的数据微服务之间的交互还是需要通过serialization来实现的。...一直在考虑,如果SDP数据平台微服务之间是通过akka-http进行数据交换的形式实现集成的话,这个集成的体系内部交互效率会非常低,这是因为1、json是一种字符型的数据,占据空间较大,传输效率自然低。...google gRPC是一种全新的RPC框架,在开源前一直是google内部使用的集成工具。gRPC支持通过http/2实现protobuf格式数据交换。...这是在系统集成编程方面相对aka-http占优的一个亮点。protobuf格式数据可以很方便的转换成 json格式数据,支持对外部系统的的开放协议数据交换。...更重要的是:用protobuf和gRPC进行client/server交互不涉及任何http对象包括httprequest,httpresponse,很容易上手使用,而且又有在google等大公司内部的成功使用经验

    70320

    如何在 Go 中优雅的处理和返回错误(1)——函数内部的错误处理

    这也是一个语言级的问题 服务/系统的错误信息返回: 微服务/系统在处理失败时,如何返回一个友好的错误信息,依然是需要让调用方优雅地理解和处理。...首先本文就是第一篇:函数内部的错误处理 ---- 高级语言的错误处理机制   一个面向过程的函数,在不同的处理过程中需要 handle 不同的错误信息;一个面向对象的函数,针对一个操作所返回的不同类型的错误...在许多高级语言中都提供了 try ... catch 的语法,函数内部可以通过这种方案,实现一个统一的错误处理逻辑。...这里也催生出了集中解决方案 defer 函数   笔者采用的方法,是将需要返回的 err 变量在函数内部全局化,然后结合 defer 统一处理: func SomeProcess() (err error...原文标题:《如何在 Go 中优雅的处理和返回错误(1)——函数内部的错误处理》 发布日期:2021-09-18 原文链接:https://cloud.tencent.com/developer/article

    10.3K151

    详解javascript中的即时函数,内部函数,能重写自身的函数即时函数内部函数返回函数的函数能重写自己的函数小结

    在上篇谈到匿名函数和回调函数的基础上,我们接着介绍javascript中的即时函数,内部函数,返回函数的函数,能重写自身的函数等几种常见的函数类型及使用方法。...所以,我们自然就可以在一个函数内部定义另外一个函数,这样的函数就叫做内部函数。...我们知道内部函数只能在定义它的函数内部调用它,不能再外部调用它。所以有时候也叫它私有函数。 使用私有函数有什么好处呢?...返回函数的函数 正如之前所提到的那样,函数始终有一个返回值,即便不是显示的返回值么,它也会隐式的返回一个undefined,所以既然函数能返回一个唯一值,那么自然函数也能够返回一个函数。...能重写自己的函数 我们可以在一个函数的内部重定义该函数。

    1.9K11

    CoCreateInstance调用返回代码0x80040154的一种解决方法

    同时还要在图片和视频文件的顶部加上LOGO。像如下这样的: ?      ...在另外一台Win7机器上测试时,缩略图中并没有出现想象中的LOGO。一看日志文件,发现一直在报:CoCreateInstance()调用返回0x80040154。...那么CoCreateInstance()为啥会返回0x80040154呢?这个代码又意味着什么嗯?从网上的搜索结果来看,0x80040154是表示"Class Not Registered"。...这个怀疑显然是不成立的,从MSDN上来看从XP SP2就开始支持了啊: ?       那么难道是参数给的不对?...而这个GUID在Windows7上是不存在的(搜索注册表即可看到结果): ? ?       自然CoCreateInstance()调用就会返回0x80040154了。

    2.7K100

    storageemulated0路径下的File.listFiles返回值为null

    回值为null 前言 为了获取Android手机中某个文件夹下的所有文件夹或文件,我们利用File类的listFiles方法,但是,有些文件路径下明明有子文件,可是该方法总是返回null值。...比如Android虚拟机中的storage/emulated/0路径下明明有子文件,但是,listFiles却返回null。...getAbsolutePath(); File DirOrFile=new File(path ); File[] files = DirOrFile.listFiles(); 二、但是,以上代码会返回...null值,此时,打开Android studio的build.gradle(Module.app)文件,将其中的targetSdkVersion修改为22(小于23即可),不必管它是否报错,直接点击提示的...【Sync Now】 三、完成之后,再将targetSdkVersion修改回您原先的版本号即可解决问题(我也不知道发生了什么神奇的事情,但是,这样就是解决了)

    1.7K20

    Java基础02 方法与数据成员

    这个方法有一个int类型的返回值。Java中使用return来返回值。 注意this,它用来指代对象自身。当我们创建一个aPerson实例时,this就代表了aPerson这个对象。...aPerson的高度增加了10。 调用同一对象的其他方法 在方法内部,可以调用同一对象的其他方法。在调用的时候,使用this.method()的形式。我们还记得,this指代的是该对象。...比如上面的getHeight()的例子中,尽管我们从来没有提供height的值,但Java为我们挑选了一个默认初始值0。...基本类型的数据成员的默认初始值: 数值型: 0 布尔值: false 其他类型: null 我们可以在声明数据成员同时,提供数据成员的初始值。...} 这里,数据成员height的初始值为175,而不是默认的0了。

    74490

    Java基础02 方法与数据成员

    这个方法有一个int类型的返回值。Java中使用return来返回值。 注意this,它用来指代对象自身。当我们创建一个aPerson实例时,this就代表了aPerson这个对象。...aPerson的高度增加了10。 调用同一对象的其他方法 ---- 在方法内部,可以调用同一对象的其他方法。在调用的时候,使用this.method()的形式。我们还记得,this指代的是该对象。...比如上面的getHeight()的例子中,尽管我们从来没有提供height的值,但Java为我们挑选了一个默认初始值0。...基本类型的数据成员的默认初始值: 数值型: 0 布尔值: false 其他类型: null 我们可以在声明数据成员同时,提供数据成员的初始值。...} 这里,数据成员height的初始值为175,而不是默认的0了。

    37420

    2.14 PowerBI数据建模-度量值空值返回0及3个坑点的应对方案

    在PowerBI中,度量值返回空值和返回0是两回事。数据表里没有数或者是空值算出来会是空值,数据表中有数算出来是0才是0。...如下是筛选了客户C的销量,显示汉字空白(英文环境为BLANK)。解决方案 通常情况下,针对度量值返回空值,把度量值在末尾+0或者使用条件判断空值返回0,就能解决问题。...2 上述方案在补0的同时,会把原本返回空的所有的维度值都带出来,比如日期对应的销量,未来没有销量的日期也会带出来返回0。...这个时候需要再增加一层条件判断,如果当前上下文的最小日期大于订单表的最大日期,就返回空,否则返回补0的度量值。...当给度量值补0的时候,品类和产品的筛选将不再起作用,被常量0打回原形,形成了全量笛卡尔积。

    18510

    软件内部的定时炸弹:0-Day Log4Shell只是冰山一角

    在我写这篇文章的时候Log4Shell已经发生了。所以这成为我将要分享的最好的例子–为什么现在的网络威胁更具威胁性。...我需要告诉你的是,网络安全威胁的性质不同于我们过去所面临的挑战–从技术复杂性到日益增长的相互依赖。因此,攻击者抓住机会的速度比我们的缓解要快得多。但首先让我们谈谈什么是Log4Shell。...Log4j 0-day 漏洞(又称"Log4Shell")(CVE-2021–44228 & CVE-2021–45046) 世界各地的公司都在努力降低多年来发现的最重要的开源软件安全漏洞造成的损害。...最后的话–软件内部的定时炸弹 无论是Log4j还是Realtek漏洞–都是冰山一角。...在蠕虫和病毒准备削弱网络的重要部分的早期,我们作为一个行业没有做任何事情:我们没有实施更好的技术,减少我们的攻击面,或解决代码库中的内存损坏问题。

    27440
    领券