如何知道组件在其父级中可以采用的大小?

Posted

技术标签:

【中文标题】如何知道组件在其父级中可以采用的大小?【英文标题】:How know the size a component can assume in it's parent? 【发布时间】:2011-02-15 13:19:49 【问题描述】:

我正在创建一个自定义组件,我在哪里可以知道它可以假定它的父级的尺寸?在 Layout 中,它是用 fill_parent x fill_parent 定义的。

我在构造函数、onMeasure 方法和 onFinishInflate 上尝试了 getWidth() x getHeight(),在所有情况下都返回 0,我想知道它必须在独立的屏幕尺寸中绘制某些组件的尺寸。

【问题讨论】:

【参考方案1】:

您可以覆盖 onMeasure() 并从那里获取值。

http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)

在 onMeasure 中,您实际上可以为组件设置自己的尺寸,然后根据尺寸构建组件。

使用 View.MeasureSpec.getSize(方法接受的参数之一。宽度或高度)来获取尺寸。

【讨论】:

第一个参数的值是 1073742304,第二个是 1073742678。我很确定我的屏幕小了很多。 这是因为你被赋予了特殊类型的参数:developer.android.com/reference/android/view/… 只需在你的 in 参数上使用方便的方法来获得你想要的东西【参考方案2】:

getWidth()getHeight() 只会在布局阶段之后填充,即在调用 onLayout() 之后。

您不应使用onMeasure()getMeasuredWidth()/getMeasuredHeight() 中的值,因为这些只是视图最初提供或希望拥有的尺寸,不一定是它最终实际获得的尺寸。

更多信息请参见http://developer.android.com/guide/topics/ui/how-android-draws.html。

【讨论】:

那你是说通过代码无法找到视图的高度? 嗯不,你只需要等到视图布局完毕。 我明白了,我在这里找到了一个很好的答案***.com/questions/4142090/…

以上是关于如何知道组件在其父级中可以采用的大小?的主要内容,如果未能解决你的问题,请参考以下文章

响应式布局:调整 SVG 大小以填充其父级的剩余空间

jquery - 到达容器时调整元素大小

如何相对于其父组件定位 React 组件?

如何检查 iOS 中的视图层次结构?

嵌套 ControlValueAccessor 的角度验证状态未在父级中正确传播,如何实现此验证?

让 div 跟随光标在特定的 div 父级中