博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 关于view的getLayoutParams().width,getWidth(),getMeasuredWidth();
阅读量:7208 次
发布时间:2019-06-29

本文共 1813 字,大约阅读时间需要 6 分钟。

习惯了使用xml的布局方式,当动态布局的时候就有许多疑点,记录一下,帮助我这老头一样的记忆力.

网上也有许多解析这getLayoutParams().width,getWidth(),getMeasuredWidth();三种方式的获取区别,参考并理解了下:

getLayoutParams().width:

这里顺便提下,LayoutParams,每个view都需要一个LayoutParams,告诉父容器的一些规则和方式,这时候该view的LayoutParams要与父容器的LayoutParam相相对应,比如该view的父容器使用的LinearLayout.LayoutParam,该view的布局类型也要对应着LinearLayout.LayoutParam,不然的话回报类型转换错误.好了LayoutParam就提到这里.

getLayoutParams().width获取的宽度是条件是你地xml中定义该view的时候,:widt="150dp",就是固定值,如果你设置了"match_parent","wrap_content",返回的值是-1,其实是定义的常量:

public static final int FILL_PARENT = -1;public static final int MATCH_PARENT = -1;public static final int WRAP_CONTENT = -2;
 
getLayoutParams().width返回的是该view向父view请求的最大宽度,不是view实际绘画的宽度.怎么说呢,其实应该是接近实际宽度.

getWidth()大多人使用的时候返回都是0,因为在oncreat()中view还没被绘制的,在制onWindowFocusChanged()开始绘制的,getWidth()获取的就是该view的实际宽度.所以要想获取该高度在oncreat():

 ViewTreeObserver vto2 = firstAd.getViewTreeObserver();        vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                firstAd.getViewTreeObserver().removeGlobalOnLayoutListener(this);                RelativeLayout.LayoutParams lp= (RelativeLayout.LayoutParams) 	firstAd.getLayoutParams();                            }        });

getMeasuredWidth()

在onMeasure()执行完后才会有值 ,该方法就是getLayoutParams().width所说的父容器寄给的最大宽度.
View的大小由width和height决定。一个View实际上同时有两种width和height值 
• 第一种是measure width和measure height。他们定义了view想要在父View中占用多少width和height(详情见Layout)。measured height和width可以通过getMeasuredWidth() 和 getMeasuredHeight()获得。 
• 
• 第二种是width和height,有时候也叫做drawing width和drawing height。这些值定义了view在屏幕上绘制和Layout完成后的实际大小。这些值有可能跟measure width和height不同。width和height可以通过getWidth()和getHeight()获得。 
这两个方法所获取的width和height可能跟实际draw后的不一样。 

 

    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6845153.html,如需转载请自行联系原作者

你可能感兴趣的文章
在CentOS6.5上安装Tomcat6
查看>>
Hadoop2.6.0伪分布环境搭建
查看>>
断点续传(代码实现)
查看>>
Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
查看>>
我曾经七次鄙视自己的灵魂 卡里.纪伯伦
查看>>
上传RNA-seq数据到NCBI GEO数据库
查看>>
3分钟快速presentation
查看>>
弹出无边框网页的Javscrpt代码
查看>>
C#代码中背后进行的值拷贝
查看>>
事件处理程序的执行上下文
查看>>
现代软件工程讲义 目录
查看>>
android 拨打电话与发送短信
查看>>
ORM内核原理解析之:延迟加载
查看>>
Oracle 默认表空间(default permanent tablespace) 说明
查看>>
jquery 遍历 TextBox 输入框求和,求平均值并判断输入内容是否为数字
查看>>
设计模式之十(外观模式)
查看>>
Dapper的语法应用
查看>>
easyui的validatebox重写自定义验证规则的几个实例
查看>>
ubuntu下定时任务的执行
查看>>
Effective C++ 条款44
查看>>