Android view的requestLayout()

本文探讨了在使用ListView时遇到的一个问题,即同一bitmapdrawable对象在不同item中的显示尺寸不一致,导致图片变小。通过分析bitmapdrawable和ImageView的源码,发现直接重新new bitmapdrawable对象无法解决问题。最终,作者发现调用ImageView的requestLayout方法在每次调用setImageDrawable之前,可以解决此问题。文章详细解释了问题原因及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public void requestLayout ()
Since: API Level 1

Call this when something has changed which has invalidated the layout of this view. This will schedule a layout pass of the view tree.

 我们可以理解为重新布局了一下view;

用途:有 时我们在改变一个view 的内容之后 可能会造成显示出现错误,比如写ListView的时候 重用convertview中的某个TextView 可能因为前后填入的text长度不同而造成显示出错,此时我们可以在改变内容之后调用requestLayout方法加以解决。

上面这段 话我摘抄别人的博客了,只是这个方法解决了我一个问题,这个问题是同一个bitmapdrawable对象,在listview中显示的时候,由于每个 item中的imageview大小都不一样,所以当同一个bitmapdrawable对象在imageview-A显示(正常),当显示到 imageview-B显示(正常),但是当listview滚动到A的时候,图片变小了,不清楚怎么回事?

我查了 bitmapdrawable的源码,也看了imageview.setImageDrawable的源码,知道bitmapdrawable会保存一些 属性,但是没有找到解决的方案,有个方案,就是重新new个bitmapdrawable对象,因为imageview.setImageBitmap方 法源码中就是每次都new个bitmapdrawable来显示的。但是当我发现requestLayout()方法的时候,在每次调用这个方法 setImageDrawable之前调用imageview的requestLayout方法,居然显示正常了!!!

变小的原因不清楚,后面慢慢查,至少现在有个解决方案哈。

不好意思,这个问题通过上面这个方法没有解决!哎!只能重新拷贝新的bitmap生成新的drawable对象才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值