android activity view 获取高度,Android中获取View宽高方法

在Android开发中,为了获取View的宽高,开发者通常需要避免在onCreate()等生命周期早期方法中直接获取,因为这时宽高还未确定。本文介绍了三种方法:1) 使用View.post(Runnable)延迟获取,确保在测量过程后;2) 通过LayoutParams获取已设定的宽高,适用于XML预设尺寸的情况;3) 手动调用measure()方法并构造MeasureSpec,适用于wrap_content和固定尺寸,但无法处理match_parent。每种方法都有其适用场景和优缺点。
摘要由CSDN通过智能技术生成

Android开发中经常需要获取控件的宽高,比如前不久我在写一个图片加载库时,因为需要对Bitmap进行裁剪就遇到了需要获取ImageView宽高的问题。

如果稍微了解过一下View的绘制过程,就会知道直接在onCreate()等生命周期回调方法中获取宽高,获取到的值是0,所以我们需要采用一些特殊的方法去获取。

这里简单总结一下获取宽高的几种方法:

一、通过View.post(new Runnable())获取

这里的view可以是你需要获取宽高的View。要注意的是view要执行此方法必须保证它已经attached到了window上,因此在此之前是不能调用这个方法的。

在Runnable里可以执行获取宽高的方法:

view.post(new Runnable(){

@Override

public void run() {

int width = view.getMeasuredWidth();

int height = view.getMeasuredHeight();

}

});

这个方法的原理在于:View的宽高需要在Measure 过程后才能确定,直接在onCreate()等回调方法里获取只能得到0,因为此时还没有开始Measure操作。

而通过view.post()在主线程的消息队列尾部插入了一个消息,也就是说执行获取宽高的操作被延后了,并且能够保证Measure操作在此之前,所以就能够在这里获取到正确的宽高了。

有关为什么“能够保证Measure操作在此之前”,我会在下一篇文章里详细分析。

另外,在网上还可以搜到其他类似方法如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值