本文共 1813 字,大约阅读时间需要 6 分钟。
习惯了使用xml的布局方式,当动态布局的时候就有许多疑点,记录一下,帮助我这老头一样的记忆力.
网上也有许多解析这getLayoutParams().width,getWidth(),getMeasuredWidth();三种方式的获取区别,参考并理解了下:
这里顺便提下,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实际绘画的宽度.怎么说呢,其实应该是接近实际宽度.
ViewTreeObserver vto2 = firstAd.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { firstAd.getViewTreeObserver().removeGlobalOnLayoutListener(this); RelativeLayout.LayoutParams lp= (RelativeLayout.LayoutParams) firstAd.getLayoutParams(); } });
本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6845153.html,如需转载请自行联系原作者