我需要找出将视图附加到其父视图后会有多大。
我已经重写了这个方法:
onMeasure(int, int);
但看起来只有当我实际使用以下方法将自定义视图添加到其容器时才会调用此方法:
addView(myView);
您认为有没有办法在渲染视图本身之前获取这些信息?基本上,我需要在附加视图之前知道实际尺寸,如果需要更多一定的空间,则根本不附加视图。
anybody?
如果您想在活动将其添加到其视图层次结构、测量并布局之前获取宽度和高度,您将必须调用measure()
on the View
打电话之前自己getMeasuredWidth()
or getMeasuredHeight()
.
由于测量的宽度和高度是在调用measure后设置的(依次调用onMeasure()
) 在此之前它们将返回 0。您必须提供MeasureSpec
s to measure(..)
这将根据您的需求而有所不同。
允许孩子们自己施加任何约束的 MeasureSpecs 看起来像
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(*some width*, MeasureSpec.EXACTLY);
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(*some height*, MeasureSpec.EXACTLY);
很重要的一点. (已在新 API 中更改)上面传入的宽度可以是显式的 px 或ViewGroup.LayoutParams.WRAP_CONTENT
or ViewGroup.LayoutParams.FILL_PARENT.
罢工>
还值得注意的是,当您的视图在实际目标层次结构中测量时,MeasureSpec 将传递给measure()
将被配置基于包含ViewGroups
布局逻辑。如果在此父视图组/其自己的布局约束/任何同级子视图的上下文中考虑时第一个度量值无效,则可能会多次调用它。无需等待viewGroup
打电话measure()
在实现任何依赖于测量大小的逻辑之前,很难(取决于情况)获得最终结果measuredWidth & height
从上述解决方案来看,但在我使用上述技术的所有情况下,它都符合目的,但它们相对简单。如果您确实需要在上下文中进行测量,您可能应该在之后进行onLayout()
已返回并明确设置任何更改requestLayout()
again.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)