Android在OnCreate中获取控件的宽度和高度
在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中获取控件的宽度和高度相关推荐
- Android如何在onCreate()方法中获取控件的高度和宽度
在Android中,有时我们需要测量控件的宽度和高度进行一些运算,特别是在自适应屏幕的时候,这些计算就变得特别必要,但是,如果我们直接在onCreate,或者onStart.onResume(第一次执 ...
- android获取自适应高度,Android中oncreate中获得控件高度或宽度的实现方法
Android中oncreate中获得控件高度或宽度的实现方法 onCreate函数只是提供了数据初始化的机会,此时还没有正式绘制图形.在图形尚未渲染的情况下,getWidth()或getHeight ...
- Asp.net 2.0 中获取控件输出的Html代码 (转)
将Asp.net 控件的呈现html获取,在不少场合会用到,比如生成静态页时 以下代码选自 Asp.net 2.0 高级编程 转自:Asp.net 2.0 中获取控件输出的Html代码 public ...
- c#中获取控件窗体句柄,获取窗体等的一些操作
1.Control.Handle 就是获取控件绑定到的窗口句柄. 2.control.IsHandleCreated 控件是否有与其关联的句柄 3.WinForm自定义函数FindControl实现 ...
- Android 在onCreate()方法中获取控件宽高值为0解决方案
大家很多时候需要在Activity或者Fragment的onCreate()方法中获取声明的空间的高度或者宽度,进行位置移动或者其他操作,但是当调用 view.getHeight() 或者 view. ...
- 点击查询后在表格中获取控件的值
1.效果 $列名//插入公式 注:手机端得到的控件的字符串与pc端不同.eg: 『1月','2月』 『1月,2月』 2.操作 注:1.定义下拉复选框的名称为列名 2.在表格中插入公式 $列名 即可 3 ...
- Android 中获取手机屏幕的宽度和高度(单位为像素)
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
- android获取控件宽和高
Android获取控件宽高 在项目中用到了测量控件的宽和高,这个在Activity的onCreate去使用控件的getHeight()和getWidth()方法去获取是会失败的,返回的都是0.这是由于 ...
- android 获取控件 id 工具,如何使用appium desktop 获取Android APP 控件的id
背景: 随着Android 版本的更新,你会发现我们之前用的最新的版本的Appium 1.5.3无法启动我们的 Android APP 在模拟器为7.0的设备上,所以我们有必要了解如何使用 appiu ...
最新文章
- python 开发板-MicroPython:STM32 上 的 Python 开发
- django-celery中配置celery中的日志
- Spring中的InitializingBean接口的使用
- 使用delphi 开发多层应用(十三)使用Basic4android 直接访问kbmMW server
- 系数矩阵为方阵的线性方程组解的情况
- 矩阵方程求解最快c语言算法,求助! C语言用矩阵求解方程组
- lycos搜索引擎_常用的搜索引擎都有哪些特点?
- 冰点文库下载器V3.2.4
- 解决IDEA 打开Springboot项目提示 Unmapped Spring configuration files found.
- java 构造方法能被继承吗_Java中构造函数可以被继承么
- 面试PHP的尴尬经历以及今后的职业规划
- 2022年安全员-B证考试题库模拟考试平台操作
- oracle hint 强制索引
- 那些年啊,那些事——一个程序员的奋斗史 ——53
- creo2.0安装方法
- 复旦大学自考计算机软件难度,复旦大学自考本科难吗
- 怎么使计算机运行UG10变得快,如何提高UG的运行速度,UG反应慢怎么办
- Unity - 从RG中解压法线贴图
- word打印为pdf去掉批注和修订记录
- RabbitMQ系列笔记封装篇
热门文章
- 网络推广专员浅析在网站导航设计排版中应如何深入完成网络推广?
- 企业网络推广——企业网络推广专员要学会打开网站优化新思路
- c语言中二进制文件的访问速度比文本文件快,以下叙述中错误的是( )。A.C语言中对二进制文件的访问速度比文本文件快B...._考试资料网...
- 开发日记-20190802 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 18
- Hadoop之父Doug Cutting:Lucene到Hadoop的开源之路
- PowerDesigner导入MySQL数据库表
- 并发编程协程(Coroutine)之Gevent
- Django(models中字段+参数)
- ABAP Netweaver和Hybris Enterprise Commerce Platform的登录认证
- [JAVA][Liferay] Configure sharding in multiple sites