dav*_*ola 25 android layoutparams
我有一个视图(包含广告),我需要缩放以适应某个时间点(加载广告后)的屏幕宽度.所以我有一个方法setHeight(myView)来计算给定屏幕宽度的正确高度,并相应地更改视图的LayoutParams.代码的关键部分是:
LayoutParams params = myView.getLayoutParams();
int width = myView.getWidth();
if (params != null && width > 0) {
params.height = (int) Math.round(ratio * width);
}
Run Code Online (Sandbox Code Playgroud)
这似乎在很大程度上起作用,但有时视图不会缩放.如果我在底部添加以下行,似乎只是合理地工作:
myView.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)
这似乎也有意义,因为Android Views会调用requestLayout()他们的setLayoutParams()方法.相反,我认为公共字段(params.height)中的更改不会触发布局更改.
另一方面,我反复在网上找到简单更改参数的教程,然后再不再设置视图.
所以,我的问题是:在更改LayoutParams的属性后立即更新布局是否正确,我需要setLayoutParams再次调用?只是更改属性只会导致布局更改在稍后某个时间从其他地方触发布局更改时?
laa*_*lto 42
布局参数的更改仅对下一个布局传递生效.
requestLayout() 安排布局通行证
setLayoutParams()requestLayout()你观察到的电话
有时布局传递是通过其他方式安排的.例如,在通货膨胀之后,布局参数也立即膨胀,并且测量/布局消息刚刚被发布到UI线程消息队列以供稍后处理.
因此,为了安全起见,请requestLayout()在触摸布局参数后立即致电.setLayoutParams()虽然在原地修改params时并不是绝对必要的,但它也可以工作.
在Kotlin中,您可以使用 KTX 扩展来更新LayoutParams
view.updateLayoutParams { height = newValue }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9065 次 |
| 最近记录: |