Android View专题2--获取View的宽高的多种方案

概要:

需求:
    有时候需要在OnCreate()中获取View的宽度和高度,
问题:
     而调用getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight()这几个方法获取到的值都是0。
原因:
    Activity在调用onResume()后才会开始执行View的初始化,所以此时View的宽高还是0.
 解决方法如下:
     使用View的post方法获取View的宽高:

调用代码如下:

//获取View的宽高
lession2LifeImageView.post(newRunnable() {
    @Override
    public voidrun() {
        intwidth =lession2LifeImageView.getWidth();
        intheight =lession2LifeImageView.getHeight();
        Log.d("lincoln","view--->Width:"+width+" -->Height:"+height);
    }
});

其他解决方案:

view.getViewTreeObserver().addOnPreDrawListener、
或
view.getViewTreeObserver().addOnGlobalLayoutListener
或
view.addOnLayoutChangeListener

 注意:  以上三种方案都存在重复调用的问题,需要及时移除监听

其他思路:

根据View创建时的生命周期可以知道,只要在onMeasure()方法之后都可以获得View的真实宽高

View创建时生命周期和Activity生命周期关系:

进入Activity时,View和Activity生命周期关系
源码

Demo源码:GitHub:ExplainView

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,633评论 25 709
  • 隔着网络,素不相识的你,你好!从今天短暂的聊天中,得知你是一个参加过社团,也参与了暑期支教,但没有当过干部,喜欢听...
    七七_77阅读 3,273评论 0 0
  • 今天是11月20号,星期一,晴。 早上照例6点起床,洗漱完准备吃早餐,昨天婆婆回来了,我们两口子又不用早起了,家里...
    雅琳妈妈阅读 1,911评论 4 3