在onCreate中LinearLayout的高度为0。

23

我正在尝试根据(屏幕高度-布局高度)/列表大小动态调整行高。

不幸的是,在onCreate方法中,布局高度返回为null(但在单击监听器中调用时不会出现此问题)。

是否有其他方法可以调用它?

1个回答

61

您必须等待布局完成,即在onCreate()之后。您可以通过监听View上的onSizeChanged()事件或从onCreate() (myView.post(new Runnable() { ... }))中发布一个Runnable来实现。


10
将一个 Runnable 发布到 View 上为什么可以保证 Runnable 中的代码在布局完成后执行?这是否是 View 的设计特性,即在布局完成后消息会从其 Handler 中处理? - Trevor
22
UI事件队列将按顺序处理事件。在调用setContentView()之后,事件队列将包含一个请求重新布局的消息,因此您在队列中发布的任何内容都将在布局完成后发生。 - Romain Guy
2
两行代码胜过十页文档……简单明了……谢谢。 - Nitin Bansal
1
@RomainGuy 我知道这篇文章已经有些年头了,但是对于未来的搜索来说,这种技术在大多数设备上都非常有效,但在运行2.2和4.0的Nexus S上失败了。 - momo
10
没有明确可靠的回调函数来完成这个目的,对所有 Android 开发者来说都是一种罪行。 - Oren
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接