android - 获取以编程方式创建的视图的估计高度

Posted

技术标签:

【中文标题】android - 获取以编程方式创建的视图的估计高度【英文标题】:android - get estimated height of a programmatically created view 【发布时间】:2016-03-19 07:32:49 【问题描述】:

如何以编程方式在添加所有视图后(即何时真正可以测量)创建RelativeLayout的 高度?我以编程方式创建了应该是该 RL 子级的 Button,设置它们的边距和对齐方式,将它们添加到 RL,因此可以测量 RL 的高度。普通 rl.getHeight() 返回 0。我使用了这个代码:

rl.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
int rlHeight=rl.getMeasuredHeight();

在 Nexus 5 (API 23) 上一切正常,但在其他使用 API 17(我记得,4.2 或其他版本)的设备上,它会抛出 NPE。怎么办?

附: OnGlobalLayoutListener 和 OnPreDrawListener 不行,因为我需要在调用 setParams(...) 并将 RL 添加到外部布局之前测量高度。

【问题讨论】:

Determining the size of an android view at runtime的可能重复 【参考方案1】:

您可以使用 GlobalLayoutListener 或 OnPreDrawListener 在运行时以编程方式查找视图高度。参考这个答案的例子:https://***.com/a/6569243/4898635

确保在达到你的身高后移除监听器,否则它会不断被调用。

【讨论】:

在我的情况下它不能正常工作(所有的“高度”都返回 0)因为我需要在设置之前获取我的 RL 的高度(我在“for”中创建了几个不同的) LayoutParams 到我的 RelativeLayout 并将其添加到外部布局。能否请您提供其他解决方案? 在生命周期的哪个部分添加这个相对布局?您是在onCreateView/onCreate 中添加它还是在用户事件之后添加它? 我在 onCreate 中进行。其实我已经找到了类似的解决方案,我只是放了“outerLayout.addView(rl);”在我最初的问题中给出的代码之上,然后在我测量之后,我设置了边距并将 layoutparams 设置为刚刚添加的 RL。现在它在棉花糖之前的设备上也可以正常工作。虽然不确定这是最好的解决方案:)

以上是关于android - 获取以编程方式创建的视图的估计高度的主要内容,如果未能解决你的问题,请参考以下文章

多个ListViews在android中以编程方式创建

Android 编程:如何以网格方式以编程方式创建各种视图类型

在android中以编程方式创建视图时如何传递AttributeSet

在 Android 中以编程方式创建的多个文本视图的单个 onclick 侦听器

以编程方式创建持久的 android 视图

如何以编程方式动态创建所有 Android ui 组件的列表?例如文本视图、图像视图等