1.概要:

    Android源代码中很多模块都使用了post()方法,深入理解框架曾运行机制对于避开类似于本例中的小陷阱是很重要的
2.问题提出:
    如果开发一些依赖于UI控件的宽和高的功能,开发者可能会用到View的getHeight()和getWidth()方法。试图在Activity的
onCreate()方法中获取控件的宽和高。遗憾的是如果开发者在onCreate()方法中调用上述方法,会发现返回值都是0.
3.解释问题原因:
    当onCreate()方法被调用时,会通过LayoutInflater将XML布局文件填充到ContentView。填充过程只包括创建试图,却不包括设置其大小。
那么试图的大小事在何时指定的呢?
    Android开发文档的解释如下所示:
    绘制布局由两个遍历过程组成:测量过程和布局过程。测量过程由 measure(int, int) 方法完成,该方法从上到下遍历视图
树。在递归遍历过程中,每个视图都会向下层传递尺寸和规格。当measure 方法遍历结束时,每个视图都保存了各自的尺寸信息。第
二个过程由 layout(int, int, int, int) 方法完成,该方法也是由上而下遍历视图树,在遍历过程中,每个父视图通过测量过程的结果定位
所有子视图的位置信息。
4.结论如下:
    只有在整个布局绘制完毕后,视图才能得到自身的高和宽,这个过程发生在onCreate()方法之后,因此,在此之前调用getHeight()和getWidth()
方法返回的结果都是0.
5.解决办法:
    在UI线程当中去获取, 这就要涉及一个方法post()
代码:

 public class MainActivity extends Activity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
System.out.println("Button的btn.getWidth()是-->" + btn.getWidth()
+ " btn.getHeight()是-->>" + btn.getHeight()
+ " btn.getMeasuredWidth()" + btn.getMeasuredWidth()
+ " " + btn.getMeasuredHeight());
btn.post(new Runnable() {
@Override
public void run() {
System.out.println("Button的btn.getWidth()是-->" + btn.getWidth()
+ " btn.getHeight()是-->>" + btn.getHeight()
+ " btn.getMeasuredWidth()" + btn.getMeasuredWidth()
+ " " + btn.getMeasuredHeight());
}
});
} }
 
打印结果:
    可以看到子啊post方法后就获取到View的值了
    aaarticlea/png;base64,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" alt="" width="557" height="98" />
 
其实post方法是子线程访问UI线程的方法,这还提供了其他方法访问主线程,如果你想在
子线程当中改变UI线程的界面就可以用以下方法
    相关知识参考地址:http://stackoverflow.com/questions/13840007/what-exactly-does-the-post-method-do
  • Activity.runOnUiThread(Runnable)
  • View.post(Runnable)
  • View.postDelayed(Runnable,long)
  • Handler

HackThirteen 在onCreate()方法中获取View的宽度和高度的更多相关文章

  1. 如何在onCreate方法中获取视图的宽度和高度

    你可以通过视图的getWidth()和getHeight()来获取视图的宽度和高度. 但是,可能会让你失望的是,如果你直接在onCreate方法内调用这两个函数,你会的到0. 为什么呢? 这是因为,当 ...

  2. Android 开发 Activity里获取View的宽度和高度 转载

    原文地址:https://blog.csdn.net/chenbaige/article/details/77991594 前言: 可能很多情况下,我们都会有在activity中获取view 的尺寸大 ...

  3. 解决在onCreate()过程中获取View的width和Height为0的4种方法

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

  4. 解决在onCreate()过程中获取View的width和Height为0的方法

    最近在看Android底层代码的view绘制原理的时候讲到一个很有意思的事情,也是我几年前刚开始学习Android开发的时候比较纳闷的一个问题,如果你不理解Android的底层绘制,请看我之前一片文章 ...

  5. 在js中获取上传图片的宽度和高度

    Html: <input type="file" id="MapUploadTd" onchange="getMapPictureSize(th ...

  6. Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?

    在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanc ...

  7. 如何在onCreate中获取View的高度和宽度

    如何在onCreate中获取View的高度和宽度 原文链接:http://mp.weixin.qq.com/s?__biz=MzAwODE1NTI2MQ==&mid=2247483676&am ...

  8. Activity中获取view的高度和宽度为0的原因以及解决方案

    在activity中可以调用View.getWidth.View.getHeight().View.getMeasuredWidth() .View.getgetMeasuredHeight()来获得 ...

  9. android应用程序中获取view 的位置

    1. 相对位置: getLeft() , getRight(), getTop(), getBottom() 在Android中可以把left相当于X轴值, top相当于Y轴值, 通过这两个值Andr ...

随机推荐

  1. 关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题

    为了能够在工作中方便的应用OPC和充分的理解OPC的开发流程.内部机制,这两天正在研究开发OPC客户端程序,一般我们开发OPC客户端程序有以下几种方式: (1)       使用OPCNetAPI,需 ...

  2. TCP/IP/HTTP

    一.什么是TCP连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1 ...

  3. mysql事务隔离级别测试

    隔离性mysql提供了4种不同的隔离级别以支持多版本并发控制(MVCC)较低级别的隔离通常可以执行更高的并发,系统的开销也更低read uncommited(未提交读)read commited(提交 ...

  4. zufeoj 数值排序(简单题)

    数值排序 时间限制: 1 Sec  内存限制: 128 MB提交: 186  解决: 45[提交][状态][讨论版] 题目描述 输入一串数字,把这串数字中的‘0’都看成空格,那么就得到一行用空格分割的 ...

  5. 记一次oralce 11g r2 rac安装问题

    环境:虚拟机[root@rac1 ~]# lsb_release -aLSB Version:        :base-4.0-amd64:base-4.0-noarch:core-4.0-amd6 ...

  6. python开发mysql:表关系&单表简单查询

    一 一对多,多对一 1.1 建立多对一 ,一对多的关系需要注意 先建立被关联的表,被关联的字段必须保证时唯一的 在创建关联的表,关联的字段一定是可以重复的 1.2 示例: 出版社 多对一,多个老师可能 ...

  7. Docker - 使用 swarm 部署 services

    前言 经过之前一段时间学习与思考,我们已经大概明确了一些感念: Docker image/container,  service and node 简单来说,swarm允许我们以节点(node)的方式 ...

  8. StampedLock

    StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之间依然是冲突的,读锁会完全阻 ...

  9. jQuery笔记——选择器

    jQuery 最核心的组成部分就是:选择器引擎.它继承了 CSS 的语法,可以对 DOM 元 素的标签名.属性名.状态等进行快速准确的选择,并且不必担心浏览器的兼容性 常规选择器 根据id选择元素就是 ...

  10. OO设计基本原则

    OO本身就是一种大的设计模式,它是随着软件规模越来越大产生出来帮助人们建模和开发的理念,生来就带着封装.继承.多态等可复用基因.为了充分发挥这些基因的功效,使用者需要遵守一定的原则,就是所谓的面向对象 ...