getMeasuredHeight不会给出视图消耗时的精确高度

时间:2016-02-22 08:55:37

标签: android view expand

我正在尝试获取视图的高度,这是在花费之后。我在View.MeasureSpec下面使用来衡量。

public static void expand(View summary) {
    //set Visible
    summary.setVisibility(View.VISIBLE);
    summary.measure(
            View.MeasureSpec.makeMeasureSpec(((View)summary.getParent()).getMeasuredWidth(), View.MeasureSpec.EXACTLY),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    ValueAnimator mAnimator = slideAnimator(0, summary.getMeasuredHeight(), summary);
    mAnimator.start();
}  

对此Android getMeasuredHeight returns wrong values !http://developer.android.com/reference/android/view/View.MeasureSpec.html

进行了对比

如果我得到正确的高度,布局将如下enter image description here

但是现在我变得如下了 enter image description here

请建议我解决一下。

1 个答案:

答案 0 :(得分:0)

尝试使用ViewTreeObserver在View完成测量和布局时通知您;它应该能够告诉你它的确切大小。

示例代码:

    ViewTreeObserver vto = view.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            int bodyOffset = 0;
            if (textPart != null) {
                bodyOffset = textPart.getTop();
            }

            Log.d(Constants.LOGTAG, "body bottom = " + (body.getBottom() + bodyOffset));
            Log.d(Constants.LOGTAG, "ok button top = " + okButton.getTop());

            if (body.getBottom() + bodyOffset > okButton.getTop()) {
                body.setVisibility(View.GONE);
            }

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
                view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }
        }
    });