此博客为转载,原文请看这位老铁的文章: https://www.cnblogs.com/kissazi2/p/4133927.html

很经常当我们动态创建某些View时,需要通过获取他们的width和height来确定别的view的布局,但是在onCreate()获取view的width和height会得到0.view.getWidth()和view.getHeight()为0的根本原因是控件还没有完成绘制,你必须等待系统将绘制完View时,才能获得。这种情况当你需要使用动态布局(使用wrap_content或match_parent)就会出现。一般来讲在Activity.onCreate(...)、onResume()方法中都没有办法获取到View的实际宽高。所以,我们必须用一种变通的方法,等到View绘制完成后去获取width和Height。下面有一些可行的解决方案。

1、监听Draw/Layout事件:ViewTreeObserver

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {mScrollView.post(new Runnable() {public void run() {view.getHeight(); //height is ready              //do something}});}});

2、将一个runnable添加到Layout队列中:View.post()

final View view=//smth;
...
view.post(new Runnable() {@Overridepublic void run() {view.getHeight(); //height is ready
            }});

3、重写View的onLayout方法

view = new View(this) {@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);view.getHeight(); //height is ready
    }
};

4, 附加:获取固定宽高

如果你要获取的view的width和height是固定的,那么你可以直接使用:1 View.getMeasureWidth()
2 View.getMeasureHeight()

转载于:https://www.cnblogs.com/Oldz/p/9341452.html

解决在onCreate()过程中获取View的width和Height为0的4种方法相关推荐

  1. 如何解决在onCreate()中获取View的width和Height为0?

    当我们动态创建某些View时,需要通过获取他们的width和height来确定别的view的布局,但是在onCreate()获取view的width和height会得到0. view.getWidth ...

  2. android中oncreate方法,Android解决在onCreate()中获取View的width、Height为0的方法

    前言 在activity中,经常需要获取view的width和height,但是在onCreate()获取view的width和height会得到0.view.getWidth()和view.getH ...

  3. java中的onresume_android onCreate onResume中获取 View 宽高为0分析

    1.问题测试 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par ...

  4. spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程

    整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet第二步:通过request从Controller获取ModelAndView.现在来讲解第三步:reques ...

  5. Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题

    Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...

  6. 解决Linux安装过程中不能安装Grub的问题

    参考,部分转载和万分感谢:解决Linux安装过程中不能安装Grub的问题 关卡1: 从前段时间折腾了很久,刚开始是因为/boot区已经占满了,那么为什么会占满呢?因为当时尝试初次手动分区,然后参考了网 ...

  7. 解决从json文件中获取不到数据的问题

    解决从json文件中获取不到数据的问题 参考文章: (1)解决从json文件中获取不到数据的问题 (2)https://www.cnblogs.com/yhyanjin/p/7214776.html ...

  8. u盘装linux镜像是dvd吗,使用U盘刻录镜像及解决在安装过程中找不到光盘的问题...

    一.使用U盘刻录镜像 1.安装之后我们打开软件,点击文件打开,找到我们刚才进行下载的Ubuntu的ISO文件,然后点击打开,完成ISO文件的加载.接着我们插入U盘,点击UltraISO启动选项,然后找 ...

  9. cad2020安装1603错误_解决CAD安装过程中出现1603致命错误的方法

    原标题:解决CAD安装过程中出现1603致命错误的方法 安装AutoCAD的时候,出现致命错误,提示1603错误,如下图所示,应该如何解决 出现这个问题,可尝试一下方法解决 1.删除安装程序,找到一下 ...

最新文章

  1. 剑指offer_第19题_顺时针打印矩阵_Python
  2. 10种Git技巧,让你省时省力又省心!
  3. Linkedin 工程师如何优化他们的 Java 代码
  4. 视频大变革:需要技术,也需要情怀
  5. 复制构造函数 与 赋值函数 的区别
  6. 学着造轮子-RxLifeCycle
  7. Tomcat企业级应用
  8. 3409: [Usaco2009 Oct]Barn Echoes 牛棚回声
  9. 重载练习1_四种不同参数类型的方法
  10. 最长上升子序列 (LIS算法(nlong(n)))
  11. android微信发现代码,微信代码各种隐藏盘点 99%用户都不知道的微信代码
  12. Ubuntu17.10下安装TIM
  13. Adam优化算法详细解析
  14. 51单片机霍尔测速与PWM调直流电机转速快慢
  15. scrapy指定item输出项顺序到csv
  16. MATLAB代码保存为word,MATLAB怎么保存为Word?
  17. 淘晶驰芯片AIHMI简介
  18. Win10家庭版升级至专业版
  19. 谷歌将 Istio 商标移交 OUC,IBM 表示失望
  20. 分析如何编写一个timer程序(以blt_soft_timer为例)

热门文章

  1. 2022-2028年中国玫瑰花行业市场研究及前瞻分析报告
  2. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像
  3. Linux系统管理必备知识之查看系统用户和用户组
  4. web服务器tornada,flask问题
  5. 如何通过HTTP优雅调用第三方-Feign
  6. 长篇自动驾驶技术综述论文(上)
  7. Python脚本语言写法
  8. python random 随机生成一个数
  9. java自增运算符与自减运算符
  10. No cached version of com.android.tools.build:gradle:2.0.0 available for offline mode.