我有一个View(包含广告),我需要在某个时间点(广告加载后)将其缩放以适应屏幕宽度。因此,我有一个方法setHeight(myView)
,该方法计算给定屏幕宽度的正确高度,并相应地更改View的LayoutParams。代码的关键部分如下:
LayoutParams params = myView.getLayoutParams();
int width = myView.getWidth();
if (params != null && width > 0) {
params.height = (int) Math.round(ratio * width);
}
这似乎在大部分情况下都有效,但有时视图没有按比例缩放。只有在我在底部添加以下行时,它才能始终正常工作:
myView.setLayoutParams(params);
这似乎也很有道理,因为Android视图在其setLayoutParams()
方法中调用requestLayout()
。相反,我看不到公共字段(params.height
)的更改如何触发布局更改。
另一方面,我经常在网上找到教程,其中参数只是被简单地更改,然后未再次设置到视图中。
所以我的问题是:更改LayoutParams属性后要立即更新布局,是否需要再次调用setLayoutParams
?而仅更改属性只会在布局从其他地方触发布局更改时在稍后某个时间点导致布局更改吗?
myView.post { myView.layoutParams = params }
- Dude