Java Code Examples for android.widget.TextView#getMeasuredHeight()

The following examples show how to use android.widget.TextView#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: FoldingTextView.java    From Bailan with Apache License 2.0 5 votes vote down vote up
/**
 * 要伸缩文本的高度 宽度固定的MeasureSpec.EXACTLY 高度MeasureSpec.AT_MOST
 *
 * @return
 */
public int getShortHeight() {
    int measuredWidth = contentTextView.getMeasuredWidth();
    TextView copyTextView = new TextView(getContext());
    copyTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 8);
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY);
    copyTextView.setMaxLines(3);//设置默认不展开的情况下显示3行
    copyTextView.setLines(3);//文本设置3行 不够3行显示3行的高度
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST);
    copyTextView.measure(widthMeasureSpec, heightMeasureSpec);
    return copyTextView.getMeasuredHeight();
}
 
Example 2
Source File: MatrixTableAdapter.java    From android_maplibui with GNU Lesser General Public License v3.0 5 votes vote down vote up
public static int getHeight(Context context, String text, int deviceWidth) {
	TextView textView = new TextView(context);
	setPadding(context, textView);

	textView.setText(text);
	textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);

	int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(deviceWidth, View.MeasureSpec.AT_MOST);
	int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

	textView.measure(widthMeasureSpec, heightMeasureSpec);
	return textView.getMeasuredHeight();
}
 
Example 3
Source File: AlignTextView.java    From AlignTextView with Apache License 2.0 5 votes vote down vote up
/**
 * 获取文本实际所占高度,辅助用于计算行高,行数
 *
 * @param text        文本
 * @param textSize    字体大小
 * @param deviceWidth 屏幕宽度
 */
private void measureTextViewHeight(String text, float textSize, int deviceWidth) {
    TextView textView = new TextView(getContext());
    textView.setText(text);
    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(deviceWidth, MeasureSpec.EXACTLY);
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
    textView.measure(widthMeasureSpec, heightMeasureSpec);
    originalLineCount = textView.getLineCount();
    originalHeight = textView.getMeasuredHeight();
}
 
Example 4
Source File: AppIntroHolder.java    From miappstore with Apache License 2.0 5 votes vote down vote up
/**
 * 获取10行文本的高度
 * @return
 */
public int getShortMeasureHeight() {
    TextView textView = new TextView(UiUtils.getContext());
    textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP,14);
    textView.setLines(10);//表示有十行数据
    //开始宽度
    int width = tv_content.getMeasuredWidth();
    //指定测量规则
    int measureWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
    int measureHeight = View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.AT_MOST);
    //开始测量
    textView.measure(measureWidth, measureHeight);
    return textView.getMeasuredHeight();
}
 
Example 5
Source File: SuggestionStripLayoutHelper.java    From Indic-Keyboard with Apache License 2.0 5 votes vote down vote up
private void layoutDebugInfo(final int positionInStrip, final ViewGroup placerView,
        final int x) {
    final TextView debugInfoView = mDebugInfoViews.get(positionInStrip);
    final CharSequence debugInfo = debugInfoView.getText();
    if (debugInfo == null) {
        return;
    }
    placerView.addView(debugInfoView);
    debugInfoView.measure(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    final int infoWidth = debugInfoView.getMeasuredWidth();
    final int y = debugInfoView.getMeasuredHeight();
    ViewLayoutUtils.placeViewAt(
            debugInfoView, x - infoWidth, y, infoWidth, debugInfoView.getMeasuredHeight());
}
 
Example 6
Source File: EditorActivity.java    From APDE with GNU General Public License v2.0 5 votes vote down vote up
private static int getTextViewHeight(Context context, String text, float textSize, int deviceWidth, int padding) {
	TextView textView = new TextView(context);
	textView.setText(text);
	textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
	textView.setPadding(padding, padding, padding, padding);
	
	int widthMeasureSpec = MeasureSpec.makeMeasureSpec(deviceWidth, MeasureSpec.AT_MOST);
	int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
	
	textView.measure(widthMeasureSpec, heightMeasureSpec);
	return textView.getMeasuredHeight();
}
 
Example 7
Source File: FoldingTextView.java    From Bailan with Apache License 2.0 5 votes vote down vote up
/**
 * Title的高度(更新 应用介绍 权限 这几个字) 宽度是固定的MeasureSpec.EXACTLY
 *
 * @return
 */
public int getTileHeight() {
    int measuredWidth = titleTextView.getMeasuredWidth();
    TextView copyTextView = new TextView(getContext());
    copyTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY);
    copyTextView.setMaxLines(1);
    copyTextView.setLines(1);
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST);//MeasureSpec.AT_MOST情况下前一个参数设置多少无所谓
    copyTextView.measure(widthMeasureSpec, heightMeasureSpec);
    return copyTextView.getMeasuredHeight();
}
 
Example 8
Source File: SuggestionStripLayoutHelper.java    From AOSP-Kayboard-7.1.2 with Apache License 2.0 5 votes vote down vote up
private void layoutDebugInfo(final int positionInStrip, final ViewGroup placerView,
        final int x) {
    final TextView debugInfoView = mDebugInfoViews.get(positionInStrip);
    final CharSequence debugInfo = debugInfoView.getText();
    if (debugInfo == null) {
        return;
    }
    placerView.addView(debugInfoView);
    debugInfoView.measure(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    final int infoWidth = debugInfoView.getMeasuredWidth();
    final int y = debugInfoView.getMeasuredHeight();
    ViewLayoutUtils.placeViewAt(
            debugInfoView, x - infoWidth, y, infoWidth, debugInfoView.getMeasuredHeight());
}
 
Example 9
Source File: FoldingTextView.java    From Bailan with Apache License 2.0 5 votes vote down vote up
/**
 * Title的高度(更新 应用介绍 权限 这几个字) 宽度是固定的MeasureSpec.EXACTLY
 *
 * @return
 */
public int getTileHeight() {
    int measuredWidth = titleTextView.getMeasuredWidth();
    TextView copyTextView = new TextView(getContext());
    copyTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY);
    copyTextView.setMaxLines(1);
    copyTextView.setLines(1);
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST);//MeasureSpec.AT_MOST情况下前一个参数设置多少无所谓
    copyTextView.measure(widthMeasureSpec, heightMeasureSpec);
    return copyTextView.getMeasuredHeight();
}
 
Example 10
Source File: FoldingTextView.java    From Bailan with Apache License 2.0 5 votes vote down vote up
/**
 * 要伸缩文本的高度 宽度固定的MeasureSpec.EXACTLY 高度MeasureSpec.AT_MOST
 *
 * @return
 */
public int getShortHeight() {
    int measuredWidth = contentTextView.getMeasuredWidth();
    TextView copyTextView = new TextView(getContext());
    copyTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 8);
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY);
    copyTextView.setMaxLines(3);//设置默认不展开的情况下显示3行
    copyTextView.setLines(3);//文本设置3行 不够3行显示3行的高度
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST);
    copyTextView.measure(widthMeasureSpec, heightMeasureSpec);
    return copyTextView.getMeasuredHeight();
}
 
Example 11
Source File: RxPopupViewCoordinatesFinder.java    From RxTools-master with Apache License 2.0 5 votes vote down vote up
private static Point getPositionAbove(TextView tipView, RxPopupView rxPopupView,
                                      RxCoordinates anchorViewRxCoordinates, RxCoordinates rootLocation) {
    Point point = new Point();
    point.x = anchorViewRxCoordinates.left + getXOffset(tipView, rxPopupView);
    if (rxPopupView.alignedCenter()) {
        AdjustHorizontalCenteredOutOfBounds(tipView, rxPopupView.getRootView(), point, rootLocation);
    } else if (rxPopupView.alignedLeft()){
        AdjustHorizontalLeftAlignmentOutOfBounds(tipView, rxPopupView.getRootView(), point, anchorViewRxCoordinates, rootLocation);
    } else if (rxPopupView.alignedRight()){
        AdjustHorizotalRightAlignmentOutOfBounds(tipView, rxPopupView.getRootView(), point, anchorViewRxCoordinates, rootLocation);
    }
    point.y = anchorViewRxCoordinates.top - tipView.getMeasuredHeight();
    return point;
}
 
Example 12
Source File: AutoCompletePanel.java    From lua-for-android with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
public int getItemHeight() {
    if (_h != 0)
        return _h;

    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    TextView item = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, null);
    item.measure(0, 0);
    _h = item.getMeasuredHeight();
    return _h;
}
 
Example 13
Source File: TagCloudView.java    From timecat with Apache License 2.0 5 votes vote down vote up
/**
 * 初始化 singleLine 模式需要的视图
 *
 * @param widthMeasureSpec
 * @param heightMeasureSpec
 */
private void initSingleLineView(int widthMeasureSpec, int heightMeasureSpec) {
    if (!mSingleLine) {
        return;
    }
    if (mShowRightImage) {
        imageView = new ImageView(getContext());
        imageView.setImageResource(mRightImageResId);
        imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        measureChild(imageView, widthMeasureSpec, heightMeasureSpec);
        imageWidth = imageView.getMeasuredWidth();
        imageHeight = imageView.getMeasuredHeight();
        addView(imageView);
    }

    if (mShowEndText) {
        endText = (TextView) mInflater.inflate(mTagResId, null);
        if (mTagResId == DEFAULT_TAG_RESID) {
            endText.setBackgroundResource(mBackground);
            endText.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTagSize);
            endText.setTextColor(mTagColor);
        }
        @SuppressLint("DrawAllocation") LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        endText.setLayoutParams(layoutParams);
        endText.setText(endTextString == null || endTextString.equals("") ? DEFAULT_END_TEXT_STRING : endTextString);
        measureChild(endText, widthMeasureSpec, heightMeasureSpec);
        endTextHeight = endText.getMeasuredHeight();
        endTextWidth = endText.getMeasuredWidth();
        addView(endText);
        endText.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (onTagClickListener != null) {
                    onTagClickListener.onTagClick(-1);
                }
            }
        });
    }
}
 
Example 14
Source File: NoPaddingTextView.java    From AndroidWallet with GNU General Public License v3.0 5 votes vote down vote up
private int getAdditionalPadding() {
    float textSize = getTextSize();

    TextView textView = new TextView(getContext());
    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
    textView.setLines(1);
    textView.measure(0, 0);
    int measuredHeight = textView.getMeasuredHeight();
    if (measuredHeight - textSize > 0) {
        mAdditionalPadding = (int) (measuredHeight - textSize);
        Log.v("NoPaddingTextView", "onMeasure: height=" + measuredHeight + " textSize=" + textSize + " mAdditionalPadding=" + mAdditionalPadding);
    }
    return mAdditionalPadding;
}
 
Example 15
Source File: SuggestionStripLayoutHelper.java    From openboard with GNU General Public License v3.0 5 votes vote down vote up
private void layoutDebugInfo(final int positionInStrip, final ViewGroup placerView,
        final int x) {
    final TextView debugInfoView = mDebugInfoViews.get(positionInStrip);
    final CharSequence debugInfo = debugInfoView.getText();
    if (debugInfo == null) {
        return;
    }
    placerView.addView(debugInfoView);
    debugInfoView.measure(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    final int infoWidth = debugInfoView.getMeasuredWidth();
    final int y = debugInfoView.getMeasuredHeight();
    ViewLayoutUtils.placeViewAt(
            debugInfoView, x - infoWidth, y, infoWidth, debugInfoView.getMeasuredHeight());
}
 
Example 16
Source File: X8MapPointMarkerViewGroup.java    From FimiX8-RE with MIT License 4 votes vote down vote up
public void onDraw(Canvas canvas) {
    Paint p = new Paint();
    if (this.isSelect) {
        this.paintColor = getContext().getResources().getColor(R.color.colorAccent);
        this.textBg = R.drawable.x8_ai_follow_marker_info_select_bg;
    } else {
        this.paintColor = getContext().getResources().getColor(R.color.black_65);
        this.textBg = R.drawable.x8_ai_follow_marker_info_bg;
    }
    p.setColor(this.paintColor);
    p.setStrokeWidth(5.0f);
    View v1;
    View v2;
    if (this.type == 1) {
        TextView v12 = (TextView) getChildAt(0);
        TextView v22 = (TextView) getChildAt(3);
        v12.setBackgroundResource(this.textBg);
        int startY = v12.getMeasuredHeight();
        int endY = getMeasuredHeight() - v22.getMeasuredHeight();
        if (this.isRelation) {
            v22.setBackgroundResource(R.drawable.x8_ai_follow_marker_info_select_bg);
            canvas.drawLine((float) (getMeasuredWidth() / 2), (float) startY, (float) (getMeasuredWidth() / 2), (float) (endY - this.lintTop), p);
            p.setColor(getContext().getResources().getColor(R.color.colorAccent));
            canvas.drawLine((float) (getMeasuredWidth() / 2), (float) this.lintTop, (float) (getMeasuredWidth() / 2), (float) endY, p);
        } else {
            v22.setBackgroundResource(this.textBg);
            canvas.drawLine((float) (getMeasuredWidth() / 2), (float) startY, (float) (getMeasuredWidth() / 2), (float) endY, p);
        }
    } else if (this.type == 2) {
        v1 = getChildAt(0);
        v2 = getChildAt(1);
        v1.setBackgroundResource(this.textBg);
        canvas.drawLine((float) (getMeasuredWidth() / 2), (float) v1.getMeasuredHeight(), (float) (getMeasuredWidth() / 2), (float) (getMeasuredHeight() - (v2.getMeasuredHeight() / 2)), p);
    } else if (this.type == 3) {
        v1 = getChildAt(0);
        v2 = getChildAt(4);
        getChildAt(1).setBackgroundResource(this.textBg);
        v2.setBackgroundResource(this.textBg);
        canvas.drawLine((float) (getMeasuredWidth() / 2), (float) (v1.getMeasuredHeight() / 2), (float) (getMeasuredWidth() / 2), (float) (getMeasuredHeight() - v2.getMeasuredHeight()), p);
    } else if (this.type == 4) {
        v1 = getChildAt(0);
        v2 = getChildAt(2);
        getChildAt(1).setBackgroundResource(this.textBg);
        canvas.drawLine((float) (getMeasuredWidth() / 2), (float) (v1.getMeasuredHeight() / 2), (float) (getMeasuredWidth() / 2), (float) (getMeasuredHeight() - (v2.getMeasuredHeight() / 2)), p);
    }
    super.onDraw(canvas);
}
 
Example 17
Source File: ValuePicker.java    From NumberPicker with GNU General Public License v3.0 4 votes vote down vote up
public static int getTextViewHeight(Context context, boolean isBig, float textSize, float textSizeSelected) {
    TextView textView = getTextView(context, isBig, textSize, textSizeSelected);
    textView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    return textView.getMeasuredHeight();
}
 
Example 18
Source File: FloatingActionMenu.java    From MaterialWpp with Apache License 2.0 4 votes vote down vote up
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    System.out.println("onLayout:" + changed);
    if (changed) {
        int right = r - getPaddingRight();
        int bottom = b - getPaddingBottom();
        int top = bottom - mMenuButton.getMeasuredHeight();
        mMenuButton.layout(right - mMenuButton.getMeasuredWidth(), top, right, bottom);
        int dw = (mMenuButton.getMeasuredWidth() - mIcon.getMeasuredWidth()) / 2;
        int dh = (mMenuButton.getMeasuredHeight() - mIcon.getMeasuredHeight()) / 2;
        mIcon.layout(right - mIcon.getMeasuredWidth() - dw,
                bottom - mIcon.getMeasuredHeight() - dh, right - dw, bottom - dh);

        if (isCircle) {
            if (mMenuItems.size() < 2) {
                Log.e("onLayout", "Floating Action Buttons must more then one!");
                return;
            }
            double angle = Math.PI/2d/(mMenuItems.size() - 1);
            for (int i = 0; i < mMenuItems.size(); i++) {
                FloatingActionButton itemFB = mMenuItems.get(i);
                int fbWidth = itemFB.getMeasuredWidth();
                int fbHeight = itemFB.getMeasuredHeight();
                if (0 != multipleOfFB) {
                    mRadius = (int) (fbWidth * multipleOfFB);
                }
                int itemDw = (mMenuButton.getMeasuredWidth() - fbWidth) / 2;
                int itemDh = (mMenuButton.getMeasuredHeight() - fbHeight) / 2;
                int itemX = (int) (mRadius*Math.cos(i*angle));
                int itemY = (int) (mRadius*Math.sin(i*angle));
                itemFB.layout(right - itemX - fbWidth - itemDw, bottom - itemY - fbHeight - itemDh,
                        right - itemX - itemDw, bottom - itemY - itemDh);

                if (!animating) {
                    if (!mOpen) {
                        itemFB.setTranslationY(mMenuButton.getTop() - itemFB.getTop());
                        itemFB.setTranslationX(mMenuButton.getLeft() - itemFB.getLeft());
                        itemFB.setVisibility(GONE);
                    } else {
                        itemFB.setTranslationY(0);
                        itemFB.setTranslationX(0);
                        itemFB.setVisibility(VISIBLE);
                    }
                }
            }
        } else {
            for (int i = 0; i < mMenuItems.size(); i++) {
                FloatingActionButton item = mMenuItems.get(i);
                TextView label = mMenuItemLabels.get(i);

                label.setBackgroundResource(R.drawable.rounded_corners);
                bottom = top -= mItemGap;

                top -= item.getMeasuredHeight();
                int width = item.getMeasuredWidth();
                int d = (mMenuButton.getMeasuredWidth() - width) / 2;
                item.layout(right - width - d, top, right - d, bottom);
                d = (item.getMeasuredHeight() - label.getMeasuredHeight()) / 2;

                label.layout(item.getLeft() - label.getMeasuredWidth() - 50,
                        item.getTop() + d, item.getLeft(),
                        item.getTop() + d + label.getMeasuredHeight());
                if (!animating) {
                    if (!mOpen) {
                        item.setTranslationY(mMenuButton.getTop() - item.getTop());
                        item.setVisibility(GONE);
                        label.setVisibility(GONE);
                    } else {
                        item.setTranslationY(0);
                        item.setVisibility(VISIBLE);
                        label.setVisibility(VISIBLE);
                    }
                }
            }
        }
        if (!animating && getBackground() != null) {
            if (!mOpen) {
                getBackground().setAlpha(0);
            } else {
                getBackground().setAlpha(0xff);
            }
        }
    }
}
 
Example 19
Source File: AbstractCalendarView.java    From holo-calendar with Apache License 2.0 4 votes vote down vote up
@SuppressWarnings("ConstantConditions")
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
    // Let our parent(a LinearLayout) measure first
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    // Check if we're allowed to resize our view's width
    final int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
    final int maxWidth = MeasureSpec.getSize(widthMeasureSpec);
    final boolean resizeWidth = widthSpecMode != MeasureSpec.EXACTLY;

    // Variables where we'll store our measured width and height
    int measuredWidth;
    int measuredHeight;

    // Retrieve some initial dimensions of our components
    final int paddingSides = getResources()
            .getDimensionPixelSize(R.dimen.lib_calendar_day_padding_sides);
    final int daysInRow = getDaysInRow();

    final int dayWidth;
    if(resizeWidth) {
        // We may resize our View, so use our preferred size
        dayWidth = getResources().getDimensionPixelSize(R.dimen.lib_calendar_day_size);
    }  else {
        // We're not allowed to resize our View, so make sure it fits
        dayWidth = getAvailableDayWidth(maxWidth);
    }

    // Calculate our width, based on the width of a single day, the padding and the number of days each week(row)
    measuredWidth = (dayWidth * daysInRow) + (paddingSides * daysInRow * 2);

    // Calculate a measured height of the headers by using a sample TextView
    // First, create a TextView with sample text
    final LayoutInflater inflater = (LayoutInflater)
            getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final TextView sampleHeader = (TextView)
            inflater.inflate(R.layout.lib_calendar_single_header, this, false);
    sampleHeader.setText(R.string.lib_header_monday);
    // Second, measure the TextView's height
    int textWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(measuredWidth / daysInRow,
            View.MeasureSpec.AT_MOST);
    int textHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    sampleHeader.measure(textWidthMeasureSpec, textHeightMeasureSpec);
    final int headerHeight = sampleHeader.getMeasuredHeight();

    // Calculate the height of the weeks
    final int weeksInMonth;
    if(this instanceof CalendarView) {
        // If we're a single month, calculate the actual height
        weeksInMonth = mFirstValidDay.getActualMaximum(Calendar.WEEK_OF_MONTH);
    }  else {
        weeksInMonth = MAX_WEEKS_IN_MONTH;
    }
    final int weekHeight = dayWidth * weeksInMonth + (paddingSides * (weeksInMonth + 1) * 2);

    // The height is the height of all the weeks, plus the headers
    measuredHeight = weekHeight + headerHeight;


    // If we're MultiCalendarView, also add the height of the TitlePageIndicator
    if(this instanceof  MultiCalendarView) {
        final MultiCalendarView multiCalendarView = (MultiCalendarView) this;
        final TitlePageIndicator indicator = multiCalendarView.getIndicator();

        // Use the width we measured, and let the Indicator calculate it's height
        int indicatorWidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(
                resolveSize(measuredWidth, widthMeasureSpec), MeasureSpec.EXACTLY);
        int indicatorHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        indicator.measure(indicatorWidthMeasureSpec, indicatorHeightMeasureSpec);
        final int indicatorHeight = indicator.getMeasuredHeight();

        // Now we have the height, update our ViewPager with the new dimensions
        indicatorHeightMeasureSpec = View.MeasureSpec.makeMeasureSpec(measuredHeight, MeasureSpec.EXACTLY);
        final ViewPager viewPager = multiCalendarView.getViewPager();
        viewPager.measure(indicatorWidthMeasureSpec, indicatorHeightMeasureSpec);

        // Add the indicator height to the measured height
        measuredHeight += indicatorHeight;
    }

    // Set the measured dimensions
    setMeasuredDimension(resolveSize(measuredWidth, widthMeasureSpec),
            resolveSize(measuredHeight, heightMeasureSpec));
}
 
Example 20
Source File: TorrentDetailsFragment.java    From qBittorrent-Controller with MIT License 2 votes vote down vote up
/**
 * *
 * Method for Setting the Height of the ListView dynamically. Hack to fix
 * the issue of not showing all the items of the ListView when placed inside
 * a ScrollView
 * **
 */
public static void setListViewHeightBasedOnChildren(ListView listView) {

    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null)
        return;

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
    int totalHeight = 0;
    View view = null;

    for (int i = 0; i < listAdapter.getCount(); i++) {

        long numOfLines = 1;
        view = listAdapter.getView(i, view, listView);

        if (i == 0) {
            view.setLayoutParams(new LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT));
        }

        view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);

        TextView file = (TextView) view.findViewById(R.id.name);
        TextView percentage = (TextView) view.findViewById(R.id.percentage);
        ProgressBar progressBar1 = (ProgressBar) view.findViewById(R.id.progressBar1);

        if (view.getMeasuredWidth() > desiredWidth) {

            double viewWidthLong = Double.valueOf(view.getMeasuredWidth());
            double desiredWidthLong = Double.valueOf(desiredWidth);

            numOfLines = Math.round(viewWidthLong / desiredWidthLong) + 1;

            totalHeight += (file.getMeasuredHeight() * numOfLines) + percentage.getMeasuredHeight() + progressBar1.getMeasuredHeight();

        } else {
            totalHeight += view.getMeasuredHeight();
        }

    }

    LayoutParams params = listView.getLayoutParams();

    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

    listView.setLayoutParams(params);
    listView.requestLayout();

}