View.resolveSizeAndState()的第三个参数有什么用途?

12

我去了官方文档页面android google official doc,但是似乎他们犯了一个严重的错字:我们没有关于这个方法第三个参数的信息。所以我想知道是否有人已经知道如何定义这个第三个int参数。


我用grep搜索了Android源代码http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/view/View.java#View.resolveSizeAndState%28int%2Cint%2Cint%29。正如你所见,childMeasuredState被用作Views的测量状态的二进制掩码。不过,我仍然无法完全理解你可能想要如何使用它;) - Simon
好的,我无法让链接工作。只需转到页面,找到resolveSizeAndState并从那里跟随链接即可。 - Simon
@Simon 谢谢。嗯,我需要它是因为 Google 推荐使用它:在这个页面上 http://developer.android.com/training/custom-views/custom-drawing.html#layoutevent - loloof64
只使用1(即没有效果,因为返回值与参数ANDded)。您是否正在创建自己的视图组?如果不是,则没有子项,因此只需像他们一样使用1 ;) - Simon
不,只需要一个单独的视图(棋盘组件)。所以我会给1或者使用resolveSize()。谢谢 :) - loloof64
那会起作用。我做过很多自定义视图,从未使用过这种方法,99%确定它只适用于视图组。祝你好运。 - Simon
1个回答

17

childMeasuredState 是通过调用 View.getMeasuredState() 方法返回的值。布局将使用 View.combineMeasuredStates() 方法聚合其子视图的测量状态。以下是一个示例:

int childState = 0;

for (int i = 0; i < count; i++) {
    final View child = getChildAt(i);
    if (child.getVisibility() != GONE) {
        measureTheChild(child);
        childState = combineMeasuredStates(childState, child.getMeasuredState());
    }
}

然而,在大多数情况下,您可以简单地传递0。子状态目前仅用于判断View是否以比其所需更小的尺寸进行了测量。反过来,这些信息用于根据需要调整对话框的大小。在您的特定情况下,您不必担心它。


7
虽然这是一个古老而正确的答案,但谷歌的官方文档仍然缺乏对此字段的描述http://developer.android.com/reference/android/view/View.html#resolveSizeAndState(int, int, int),而这个例子http://developer.android.com/training/custom-views/custom-drawing.html在一个情况下使用0,在另一个情况下使用1,没有任何解释。非常令人困惑。 - Dennis K
我也感到困惑。我不知道它是用来做什么的。 - Neon Warge

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