Java Code Examples for android.view.View#getMeasuredHeight()

The following examples show how to use android.view.View#getMeasuredHeight() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: PairScrollView.java    From PairScrollView with Apache License 2.0 6 votes vote down vote up
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    final int count = getChildCount();
    final int parentLeft = getPaddingLeft();
    final int parentTop = getPaddingTop();

    int lastBottom = parentTop;

    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        if (child.getVisibility() != GONE) {
            final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();

            final int width = child.getMeasuredWidth();
            final int height = child.getMeasuredHeight();

            int childLeft = parentLeft + lp.leftMargin;
            int childTop = lastBottom + lp.topMargin;
            child.layout(childLeft, childTop, childLeft + width, childTop + height);
            lastBottom = childTop + height + lp.bottomMargin;
        }
    }
}
 
Example 2
Source File: FullyLinearLayoutManager.java    From ImitateTaobaoApp with Apache License 2.0 6 votes vote down vote up
private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,
                               int heightSpec, int[] measuredDimension) {
    try {
        View view = recycler.getViewForPosition(position);//fix 动态添加时报IndexOutOfBoundsException

        if (view != null) {
            RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();

            int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec,
                    getPaddingLeft() + getPaddingRight(), p.width);

            int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec,
                    getPaddingTop() + getPaddingBottom(), p.height);

            view.measure(childWidthSpec, childHeightSpec);
            measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin;
            measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin;
            recycler.recycleView(view);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
 
Example 3
Source File: ViewUtils.java    From AnimeTaste with MIT License 6 votes vote down vote up
public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}
 
Example 4
Source File: StickyHeadContainer.java    From StickyItemDecoration with Apache License 2.0 6 votes vote down vote up
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {

    final View child = getChildAt(0);
    MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();

    final int paddingLeft = getPaddingLeft();
    final int paddingTop = getPaddingTop();

    mLeft = paddingLeft + lp.leftMargin;
    mRight = child.getMeasuredWidth() + mLeft;

    mTop = paddingTop + lp.topMargin + mOffset;
    mBottom = child.getMeasuredHeight() + mTop;

    child.layout(mLeft, mTop, mRight, mBottom);
}
 
Example 5
Source File: FlowLayout.java    From BlackList with Apache License 2.0 6 votes vote down vote up
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    final int count = getChildCount();
    final int width = r - l;
    int xPos = getPaddingLeft();
    int yPos = getPaddingTop();

    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        if (child.getVisibility() != GONE) {
            final int childWidth = child.getMeasuredWidth();
            final int childHeight = child.getMeasuredHeight();
            final FlowLayoutParams lp = (FlowLayoutParams) child.getLayoutParams();
            if (xPos + childWidth > width) {
                xPos = getPaddingLeft();
                yPos += lineHeight;
            }
            child.layout(xPos, yPos, xPos + childWidth, yPos + childHeight);
            xPos += childWidth + lp.hSpacing;
        }
    }
}
 
Example 6
Source File: NotificationSettingsActivity.java    From matrix-android-console with Apache License 2.0 5 votes vote down vote up
/**
 * Refresh the listview height because the listviews are displayed in a scrollview.
 * @param listView the listview.
 */
private void refreshListViewHeight(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}
 
Example 7
Source File: BubbleLayout.java    From BubbleView with Apache License 2.0 5 votes vote down vote up
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    final int count = getChildCount();

    final int parentLeft = getPaddingLeft();
    final int parentTop = getPaddingTop();

    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        if (child.getVisibility() != GONE) {
            int childLeft = parentLeft;
            int childTop = parentTop;
            int width = child.getMeasuredWidth();
            int height = child.getMeasuredHeight();
            switch (orientation) {
                case LEFT:
                    childLeft += triangleHeight;
                    break;
                case TOP:
                    childTop += triangleHeight;
                    break;
                default:
                    break;
            }
            if (!clipToRadius) {
                childLeft += radius;
                childTop += radius;
            }
            childLeft += Math.round(borderPaintSize);
            childTop += Math.round(borderPaintSize);

            final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();
            childLeft += lp.leftMargin;
            childTop += lp.topMargin;

            child.layout(childLeft, childTop, childLeft + width, childTop + height);
        }
    }
}
 
Example 8
Source File: Toolbar.java    From android_9.0.0_r45 with Apache License 2.0 5 votes vote down vote up
private int getChildTop(View child, int alignmentHeight) {
    final LayoutParams lp = (LayoutParams) child.getLayoutParams();
    final int childHeight = child.getMeasuredHeight();
    final int alignmentOffset = alignmentHeight > 0 ? (childHeight - alignmentHeight) / 2 : 0;
    switch (getChildVerticalGravity(lp.gravity)) {
        case Gravity.TOP:
            return getPaddingTop() - alignmentOffset;

        case Gravity.BOTTOM:
            return getHeight() - getPaddingBottom() - childHeight
                    - lp.bottomMargin - alignmentOffset;

        default:
        case Gravity.CENTER_VERTICAL:
            final int paddingTop = getPaddingTop();
            final int paddingBottom = getPaddingBottom();
            final int height = getHeight();
            final int space = height - paddingTop - paddingBottom;
            int spaceAbove = (space - childHeight) / 2;
            if (spaceAbove < lp.topMargin) {
                spaceAbove = lp.topMargin;
            } else {
                final int spaceBelow = height - paddingBottom - childHeight -
                        spaceAbove - paddingTop;
                if (spaceBelow < lp.bottomMargin) {
                    spaceAbove = Math.max(0, spaceAbove - (lp.bottomMargin - spaceBelow));
                }
            }
            return paddingTop + spaceAbove;
    }
}
 
Example 9
Source File: PullHeadView.java    From Android-BluetoothKit with Apache License 2.0 5 votes vote down vote up
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
	int width = MeasureSpec.getSize(widthMeasureSpec);
	if (mHeight < 0) {
		mHeight = 0;
	}
	setMeasuredDimension(width, mHeight);
	final View childView = getChildView();
	if (childView != null) {
		childView.measure(widthMeasureSpec, heightMeasureSpec);
		mUpdateHeight = childView.getMeasuredHeight();
		/* SLog.v(TAG, "mUpdateHeight"+mUpdateHeight); */
	}
}
 
Example 10
Source File: XScrollViewActivity.java    From PullToRefresh with Apache License 2.0 5 votes vote down vote up
private int measureHeight() {
    // get ListView adapter
    ListAdapter adapter = mListView.getAdapter();
    if (null == adapter) {
        return 0;
    }

    int totalHeight = 0;

    for (int i = 0, len = adapter.getCount(); i < len; i++) {
        View item = adapter.getView(i, null, mListView);
        if (null == item) continue;
        // measure each item width and height
        item.measure(0, 0);
        // calculate all height
        totalHeight += item.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = mListView.getLayoutParams();

    if (null == params) {
        params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
    }

    // calculate ListView height
    params.height = totalHeight + (mListView.getDividerHeight() * (adapter.getCount() - 1));

    mListView.setLayoutParams(params);

    return params.height;
}
 
Example 11
Source File: InverseTimeMachineViewTransformer.java    From carouselview with MIT License 5 votes vote down vote up
@Override
public void transform(View view, float position) {
    int width = view.getMeasuredWidth(), height = view.getMeasuredHeight();
    view.setTranslationX(width * position * translationXRate * (2f / (Math.abs(position) + 2)));
    view.setScaleX(2f / (position + 2));
    view.setScaleY(2f / (position + 2));
    view.setAlpha(position < 0 ? Math.max(1 + position, 0) : 1);
}
 
Example 12
Source File: ListView.java    From android_9.0.0_r45 with Apache License 2.0 5 votes vote down vote up
/**
 * Layout a child that has been measured, preserving its top position.
 * TODO: unify with setUpChild.
 * @param child The child.
 */
private void relayoutMeasuredItem(View child) {
    final int w = child.getMeasuredWidth();
    final int h = child.getMeasuredHeight();
    final int childLeft = mListPadding.left;
    final int childRight = childLeft + w;
    final int childTop = child.getTop();
    final int childBottom = childTop + h;
    child.layout(childLeft, childTop, childRight, childBottom);
}
 
Example 13
Source File: FloatingMenuButton.java    From floatingMenu with Apache License 2.0 5 votes vote down vote up
private Point getActionViewCoordinates() {
    int[] coordinates = new int[2];
    // This method returns a x and y values that can be larger than the dimensions of the device screen.
    getLocationOnScreen(coordinates);
    // We then need to deduce the offsets
    Rect activityFrame = new Rect();
    View v = Utils.getActivityContentView(context);
    if (v != null) {
        v.getWindowVisibleDisplayFrame(activityFrame);
        coordinates[0] -= (Utils.getScreenSize(context).x - v.getMeasuredWidth());
        coordinates[1] -= (activityFrame.height() + activityFrame.top - v.getMeasuredHeight());
    }
    return new Point(coordinates[0], coordinates[1]);
}
 
Example 14
Source File: GridViewWithHeaderAndFooter.java    From cube-sdk with Apache License 2.0 5 votes vote down vote up
public int getRowHeight() {
    if (mRowHeight > 0) {
        return mRowHeight;
    }
    ListAdapter adapter = getAdapter();
    int numColumns = getNumColumnsCompatible();

    // adapter has not been set or has no views in it;
    if (adapter == null || adapter.getCount() <= numColumns * (mHeaderViewInfos.size() + mFooterViewInfos.size())) {
        return -1;
    }
    int mColumnWidth = getColumnWidthCompatible();
    View view = getAdapter().getView(numColumns * mHeaderViewInfos.size(), mViewForMeasureRowHeight, this);
    AbsListView.LayoutParams p = (AbsListView.LayoutParams) view.getLayoutParams();
    if (p == null) {
        p = new AbsListView.LayoutParams(-1, -2, 0);
        view.setLayoutParams(p);
    }
    int childHeightSpec = getChildMeasureSpec(
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 0, p.height);
    int childWidthSpec = getChildMeasureSpec(
            MeasureSpec.makeMeasureSpec(mColumnWidth, MeasureSpec.EXACTLY), 0, p.width);
    view.measure(childWidthSpec, childHeightSpec);
    mViewForMeasureRowHeight = view;
    mRowHeight = view.getMeasuredHeight();
    return mRowHeight;
}
 
Example 15
Source File: VRefreshLayoutManager.java    From SmoothRefreshLayout with MIT License 4 votes vote down vote up
@Override
public void layoutHeaderView(@NonNull IRefreshView<IIndicator> header) {
    final View child = header.getView();
    if (mLayout.isDisabledRefresh() || child.getMeasuredHeight() == 0) {
        child.layout(0, 0, 0, 0);
        if (SmoothRefreshLayout.sDebug) {
            Log.d(TAG, String.format("onLayout(): header: %s %s %s %s", 0, 0, 0, 0));
        }
        return;
    }
    final SmoothRefreshLayout.LayoutParams lp =
            (SmoothRefreshLayout.LayoutParams) child.getLayoutParams();
    final IIndicator indicator = mLayout.getIndicator();
    int left, right, top = 0, bottom;
    switch (header.getStyle()) {
        case IRefreshView.STYLE_DEFAULT:
            if (mLayout.isMovingHeader()) {
                child.setTranslationY(indicator.getCurrentPos());
            } else {
                child.setTranslationY(0);
            }
            top = mLayout.getPaddingTop() - child.getMeasuredHeight() - lp.bottomMargin;
            break;
        case IRefreshView.STYLE_SCALE:
        case IRefreshView.STYLE_PIN:
            child.setTranslationY(0);
            top = mLayout.getPaddingTop() + lp.topMargin;
            break;
        case IRefreshView.STYLE_FOLLOW_SCALE:
            if (mLayout.isMovingHeader()) {
                if (indicator.getCurrentPos() <= indicator.getHeaderHeight()) {
                    top = mLayout.getPaddingTop() - child.getMeasuredHeight() - lp.bottomMargin;
                    child.setTranslationY(indicator.getCurrentPos());
                } else {
                    top = mLayout.getPaddingTop() + lp.topMargin;
                    child.setTranslationY(0);
                }
            } else {
                top = mLayout.getPaddingTop() - child.getMeasuredHeight() - lp.bottomMargin;
                child.setTranslationY(0);
            }
            break;
        case IRefreshView.STYLE_FOLLOW_PIN:
            if (mLayout.isMovingHeader()) {
                child.setTranslationY(
                        Math.min(indicator.getCurrentPos(), indicator.getHeaderHeight()));
            } else {
                child.setTranslationY(0);
            }
            top = mLayout.getPaddingTop() - child.getMeasuredHeight() - lp.bottomMargin;
            break;
        case IRefreshView.STYLE_FOLLOW_CENTER:
            if (mLayout.isMovingHeader()) {
                if (indicator.getCurrentPos() <= indicator.getHeaderHeight()) {
                    top = mLayout.getPaddingTop() - child.getMeasuredHeight() - lp.bottomMargin;
                    child.setTranslationY(indicator.getCurrentPos());
                } else {
                    top =
                            (int)
                                    (mLayout.getPaddingTop()
                                            + lp.topMargin
                                            + (indicator.getCurrentPos()
                                                            - indicator.getHeaderHeight())
                                                    / 2f);
                    child.setTranslationY(0);
                }
            } else {
                top = mLayout.getPaddingTop() - child.getMeasuredHeight() - lp.bottomMargin;
                child.setTranslationY(0);
            }
            break;
    }
    left = mLayout.getPaddingLeft() + lp.leftMargin;
    right = left + child.getMeasuredWidth();
    if (mLayout.isInEditMode()) top = top + child.getMeasuredHeight();
    bottom = top + child.getMeasuredHeight();
    child.layout(left, top, right, bottom);
    if (SmoothRefreshLayout.sDebug) {
        Log.d(TAG, String.format("onLayout(): header: %s %s %s %s", left, top, right, bottom));
    }
}
 
Example 16
Source File: InfoBarLayout.java    From android-chromium with BSD 2-Clause "Simplified" License 4 votes vote down vote up
/**
 * Update the backgrounds for the buttons to account for their current positioning.
 * The primary and secondary buttons are special-cased in that their backgrounds change to
 * create the illusion of a single-stroke boundary between them.
 */
private void updateBackgroundsForButtons() {
    boolean bothButtonsExist = findViewById(R.id.button_primary) != null
            && findViewById(R.id.button_secondary) != null;

    for (int row = 0; row < mIndicesOfRows.size() - 1; row++) {
        final int rowStart = mIndicesOfRows.get(row);
        final int rowEnd = mIndicesOfRows.get(row + 1);
        final int rowSize = rowEnd - rowStart;

        for (int i = rowStart; i < rowEnd; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() == View.GONE || !isButton(child)) continue;

            // Determine which background we need to show.
            int background;
            if (row == 0) {
                // Button will be floating.
                background = mBackgroundFloating;
            } else if (rowSize == 1 || !bothButtonsExist) {
                // Button takes up the full width of the screen.
                background = mBackgroundFullRight;
            } else if (mLayoutRTL) {
                // Primary button will be to the left of the secondary.
                background = child.getId() == R.id.button_primary
                        ? mBackgroundFullLeft : mBackgroundFullRight;
            } else {
                // Primary button will be to the right of the secondary.
                background = child.getId() == R.id.button_primary
                        ? mBackgroundFullRight : mBackgroundFullLeft;
            }

            // Update the background.
            LayoutParams params = (LayoutParams) child.getLayoutParams();
            if (params.background != background) {
                params.background = background;

                // Save the padding; Android decides to overwrite it on some builds.
                int paddingLeft = child.getPaddingLeft();
                int paddingTop = child.getPaddingTop();
                int paddingRight = child.getPaddingRight();
                int paddingBottom = child.getPaddingBottom();
                int buttonWidth = child.getMeasuredWidth();
                int buttonHeight = child.getMeasuredHeight();

                // Set the background, then restore the padding.
                child.setBackgroundResource(background);
                child.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);

                // Re-measuring is necessary to correct the text gravity.
                int specWidth = MeasureSpec.makeMeasureSpec(buttonWidth, MeasureSpec.EXACTLY);
                int specHeight = MeasureSpec.makeMeasureSpec(buttonHeight, MeasureSpec.EXACTLY);
                measureChild(child, specWidth, specHeight);
            }
        }
    }
}
 
Example 17
Source File: InviteContactsActivity.java    From Telegram with GNU General Public License v2.0 4 votes vote down vote up
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int count = getChildCount();
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int maxWidth = width - AndroidUtilities.dp(32);
    int currentLineWidth = 0;
    int y = AndroidUtilities.dp(12);
    int allCurrentLineWidth = 0;
    int allY = AndroidUtilities.dp(12);
    int x;
    for (int a = 0; a < count; a++) {
        View child = getChildAt(a);
        if (!(child instanceof GroupCreateSpan)) {
            continue;
        }
        child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(32), MeasureSpec.EXACTLY));
        if (child != removingSpan && currentLineWidth + child.getMeasuredWidth() > maxWidth) {
            y += child.getMeasuredHeight() + AndroidUtilities.dp(12);
            currentLineWidth = 0;
        }
        if (allCurrentLineWidth + child.getMeasuredWidth() > maxWidth) {
            allY += child.getMeasuredHeight() + AndroidUtilities.dp(12);
            allCurrentLineWidth = 0;
        }
        x = AndroidUtilities.dp(16) + currentLineWidth;
        if (!animationStarted) {
            if (child == removingSpan) {
                child.setTranslationX(AndroidUtilities.dp(16) + allCurrentLineWidth);
                child.setTranslationY(allY);
            } else if (removingSpan != null) {
                if (child.getTranslationX() != x) {
                    animators.add(ObjectAnimator.ofFloat(child, "translationX", x));
                }
                if (child.getTranslationY() != y) {
                    animators.add(ObjectAnimator.ofFloat(child, "translationY", y));
                }
            } else {
                child.setTranslationX(x);
                child.setTranslationY(y);
            }
        }
        if (child != removingSpan) {
            currentLineWidth += child.getMeasuredWidth() + AndroidUtilities.dp(9);
        }
        allCurrentLineWidth += child.getMeasuredWidth() + AndroidUtilities.dp(9);
    }
    int minWidth;
    if (AndroidUtilities.isTablet()) {
        minWidth = AndroidUtilities.dp(530 - 32 - 18 - 57 * 2) / 3;
    } else {
        minWidth = (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(32 + 18 + 57 * 2)) / 3;
    }
    if (maxWidth - currentLineWidth < minWidth) {
        currentLineWidth = 0;
        y += AndroidUtilities.dp(32 + 12);
    }
    if (maxWidth - allCurrentLineWidth < minWidth) {
        allY += AndroidUtilities.dp(32 + 12);
    }
    editText.measure(MeasureSpec.makeMeasureSpec(maxWidth - currentLineWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(32), MeasureSpec.EXACTLY));
    if (!animationStarted) {
        int currentHeight = allY + AndroidUtilities.dp(32 + 12);
        int fieldX = currentLineWidth + AndroidUtilities.dp(16);
        fieldY = y;
        if (currentAnimation != null) {
            int resultHeight = y + AndroidUtilities.dp(32 + 12);
            if (containerHeight != resultHeight) {
                animators.add(ObjectAnimator.ofInt(InviteContactsActivity.this, "containerHeight", resultHeight));
            }
            if (editText.getTranslationX() != fieldX) {
                animators.add(ObjectAnimator.ofFloat(editText, "translationX", fieldX));
            }
            if (editText.getTranslationY() != fieldY) {
                animators.add(ObjectAnimator.ofFloat(editText, "translationY", fieldY));
            }
            editText.setAllowDrawCursor(false);
            currentAnimation.playTogether(animators);
            currentAnimation.start();
            animationStarted = true;
        } else {
            containerHeight = currentHeight;
            editText.setTranslationX(fieldX);
            editText.setTranslationY(fieldY);
        }
    } else if (currentAnimation != null) {
        if (!ignoreScrollEvent && removingSpan == null) {
            editText.bringPointIntoView(editText.getSelectionStart());
        }
    }
    setMeasuredDimension(width, containerHeight);
}
 
Example 18
Source File: StaggeredGridView.java    From PullToRefreshLibrary with Apache License 2.0 4 votes vote down vote up
private int getChildHeight(final View child) {
    return child.getMeasuredHeight();
}
 
Example 19
Source File: CarryLayout.java    From Dashchan with Apache License 2.0 4 votes vote down vote up
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
	int maxWidth = MeasureSpec.getSize(widthMeasureSpec);
	boolean widthUnspecified = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.UNSPECIFIED;
	int vertialPaddings = getPaddingTop() + getPaddingBottom();
	int horizontalPaddings = getPaddingLeft() + getPaddingRight();
	maxWidth -= horizontalPaddings;
	int minWidth = 0;
	int minHeight = 0;
	int lineWidth = 0;
	int lineHeight = 0;
	int horizontalSpacing = this.horizontalSpacing;
	int verticalSpacing = this.verticalSpacing;
	int count = getChildCount();
	int childWidthMeasureSpec = widthUnspecified ? MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
			: MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST);
	for (int i = 0; i < count; i++) {
		View child = getChildAt(i);
		LayoutParams layoutParams = child.getLayoutParams();
		boolean measure = child.getVisibility() != View.GONE;
		if (measure) {
			int childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec, vertialPaddings,
					layoutParams.height);
			child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
			int childWidth = child.getMeasuredWidth();
			if (lineWidth > 0 && childWidth + lineWidth + horizontalSpacing > maxWidth) {
				minWidth = Math.max(lineWidth, minWidth);
				minHeight += lineHeight + verticalSpacing;
				lineHeight = child.getMeasuredHeight();
				lineWidth = childWidth;
			} else {
				if (lineWidth > 0) {
					lineWidth += horizontalSpacing;
				}
				lineWidth += childWidth;
				lineHeight = Math.max(lineHeight, child.getMeasuredHeight());
			}
		}
		if (i + 1 == count) {
			minWidth = Math.max(lineWidth, minWidth);
			minHeight += lineHeight;
		}
	}
	minWidth += horizontalPaddings;
	minHeight += vertialPaddings;
	minWidth = Math.max(minWidth, getSuggestedMinimumWidth());
	minHeight = Math.max(minHeight, getSuggestedMinimumHeight());
	setMeasuredDimension(resolveSize(minWidth, widthMeasureSpec), resolveSize(minHeight, heightMeasureSpec));
}
 
Example 20
Source File: MyListView.java    From BubbleCloudView with MIT License 2 votes vote down vote up
/**
 * Returns the height of the child view taking into account the
 * ITEM_VERTICAL_SPACE
 * 
 * @param child The child view
 * @return The height of the child view
 */
private int getChildHeight(final View child) {
    return child.getMeasuredHeight() + 2 * getChildMargin(child);
}