在Android中,有时需要对控件进行测量,得到的控件宽度和高度可以用来做一些计算。在需要自适应屏幕的情况下,这种计算就显得特别重要。另一方便,由于需求的原因,希望一进入界面后,就能得到控件的宽度和高度。

可惜的是,根据我的验证,利用网上转载的那些方法在OnCreate函数中获取到的仍然是0(希望搞技术的能自己验证过再转载),例如Measure方法之后调用getMeasuredWidth的值还是0。

原因是因为当OnCreate函数发生时,只是提供了数据初始化的机会,此时还没有正式绘制图形。而绘制图形在OnDraw中进行,此时计算又显得 太晚。容易想到的办法是:希望能在程序刚刚测量好某个指定控件后,拿到它的宽度和高度立刻进行计算或数据初始化。这就需要有一个方法来监听到这个事件的发 生,幸好Android提供了这样的机制,利用View类中的getViewTreeObserver方法,可以获取到指定View的观察者,在绘制控件 前的一刹那进行回调,这样速度上又不耽误,得到的数据由是准确的,但此方法在之后可能会被反复调用,因此需要加入限制,普通需求下,只计算一次就够了,代 码如下(此代码在OnCreate回调函数中验证通过,实时上,因为它是监听器,所以发生事件时已经和OnCreate无关了):

layout = (MetroLayout) findViewById(R.id.layout);ViewTreeObserver vto = layout.getViewTreeObserver();vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){public boolean onPreDraw() { if (hasMeasured == false) { int height = metroLayout.getMeasuredHeight(); int width = metroLayout.getMeasuredWidth(); //获取到宽度和高度后,可用于计算  hasMeasured = true; } return true; } });

转载于:https://www.cnblogs.com/xgjblog/p/4113238.html

Android在OnCreate中获取控件的宽度和高度相关推荐

  1. Android如何在onCreate()方法中获取控件的高度和宽度

    在Android中,有时我们需要测量控件的宽度和高度进行一些运算,特别是在自适应屏幕的时候,这些计算就变得特别必要,但是,如果我们直接在onCreate,或者onStart.onResume(第一次执 ...

  2. android获取自适应高度,Android中oncreate中获得控件高度或宽度的实现方法

    Android中oncreate中获得控件高度或宽度的实现方法 onCreate函数只是提供了数据初始化的机会,此时还没有正式绘制图形.在图形尚未渲染的情况下,getWidth()或getHeight ...

  3. Asp.net 2.0 中获取控件输出的Html代码 (转)

    将Asp.net 控件的呈现html获取,在不少场合会用到,比如生成静态页时 以下代码选自 Asp.net 2.0 高级编程 转自:Asp.net 2.0 中获取控件输出的Html代码 public  ...

  4. c#中获取控件窗体句柄,获取窗体等的一些操作

    1.Control.Handle 就是获取控件绑定到的窗口句柄. 2.control.IsHandleCreated  控件是否有与其关联的句柄 3.WinForm自定义函数FindControl实现 ...

  5. Android 在onCreate()方法中获取控件宽高值为0解决方案

    大家很多时候需要在Activity或者Fragment的onCreate()方法中获取声明的空间的高度或者宽度,进行位置移动或者其他操作,但是当调用 view.getHeight() 或者 view. ...

  6. 点击查询后在表格中获取控件的值

    1.效果 $列名//插入公式 注:手机端得到的控件的字符串与pc端不同.eg: 『1月','2月』 『1月,2月』 2.操作 注:1.定义下拉复选框的名称为列名 2.在表格中插入公式 $列名 即可 3 ...

  7. Android 中获取手机屏幕的宽度和高度(单位为像素)

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,

  8. android获取控件宽和高

    Android获取控件宽高 在项目中用到了测量控件的宽和高,这个在Activity的onCreate去使用控件的getHeight()和getWidth()方法去获取是会失败的,返回的都是0.这是由于 ...

  9. android 获取控件 id 工具,如何使用appium desktop 获取Android APP 控件的id

    背景: 随着Android 版本的更新,你会发现我们之前用的最新的版本的Appium 1.5.3无法启动我们的 Android APP 在模拟器为7.0的设备上,所以我们有必要了解如何使用 appiu ...

最新文章

  1. python 开发板-MicroPython:STM32 上 的 Python 开发
  2. django-celery中配置celery中的日志
  3. Spring中的InitializingBean接口的使用
  4. 使用delphi 开发多层应用(十三)使用Basic4android 直接访问kbmMW server
  5. 系数矩阵为方阵的线性方程组解的情况
  6. 矩阵方程求解最快c语言算法,求助! C语言用矩阵求解方程组
  7. lycos搜索引擎_常用的搜索引擎都有哪些特点?
  8. 冰点文库下载器V3.2.4
  9. 解决IDEA 打开Springboot项目提示 Unmapped Spring configuration files found.
  10. java 构造方法能被继承吗_Java中构造函数可以被继承么
  11. 面试PHP的尴尬经历以及今后的职业规划
  12. 2022年安全员-B证考试题库模拟考试平台操作
  13. oracle hint 强制索引
  14. 那些年啊,那些事——一个程序员的奋斗史 ——53
  15. creo2.0安装方法
  16. 复旦大学自考计算机软件难度,复旦大学自考本科难吗
  17. 怎么使计算机运行UG10变得快,如何提高UG的运行速度,UG反应慢怎么办
  18. Unity - 从RG中解压法线贴图
  19. word打印为pdf去掉批注和修订记录
  20. RabbitMQ系列笔记封装篇

热门文章

  1. 网络推广专员浅析在网站导航设计排版中应如何深入完成网络推广?
  2. 企业网络推广——企业网络推广专员要学会打开网站优化新思路
  3. c语言中二进制文件的访问速度比文本文件快,以下叙述中错误的是( )。A.C语言中对二进制文件的访问速度比文本文件快B...._考试资料网...
  4. 开发日记-20190802 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 18
  5. Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路
  6. PowerDesigner导入MySQL数据库表
  7. 并发编程协程(Coroutine)之Gevent
  8. Django(models中字段+参数)
  9. ABAP Netweaver和Hybris Enterprise Commerce Platform的登录认证
  10. [JAVA][Liferay] Configure sharding in multiple sites