AutofitHelper.java 文件源码

java
阅读 26 收藏 0 点赞 0 评论 0

项目:aMatch 作者:
/**
 * Re-sizes the textSize of the TextView so that the text fits within the bounds of the View.
 */
private static void autofit(TextView view, TextPaint paint, float minTextSize, float maxTextSize,
        int maxLines, float precision) {
    if (maxLines <= 0 || maxLines == Integer.MAX_VALUE) {
        // Don't auto-size since there's no limit on lines.
        return;
    }

    int targetWidth = view.getWidth() - view.getPaddingLeft() - view.getPaddingRight();
    if (targetWidth <= 0) {
        return;
    }

    CharSequence text = view.getText();
    TransformationMethod method = view.getTransformationMethod();
    if (method != null) {
        text = method.getTransformation(text, view);
    }

    Context context = view.getContext();
    Resources r = Resources.getSystem();
    DisplayMetrics displayMetrics;

    float size = maxTextSize;
    float high = size;
    float low = 0;

    if (context != null) {
        r = context.getResources();
    }
    displayMetrics = r.getDisplayMetrics();

    paint.set(view.getPaint());
    paint.setTextSize(size);

    if ((maxLines == 1 && paint.measureText(text, 0, text.length()) > targetWidth)
            || getLineCount(text, paint, size, targetWidth, displayMetrics) > maxLines) {
        size = getAutofitTextSize(text, paint, targetWidth, maxLines, low, high, precision,
                displayMetrics);
    }

    if (mIsHeightFitting) {
        int targetHeight = view.getHeight() - view.getPaddingTop() - view.getPaddingTop();
        if (targetHeight <= 0) {
            if (size < minTextSize) {
                size = minTextSize;
            }
            view.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
            return;
        }

        float textHeight = getTextHeight(text, paint, targetWidth, size);
        textHeight = getTextHeight(text, paint, targetWidth, size);
        float heightRatio = targetHeight / textHeight;
        float newSize = size * heightRatio;
        if (newSize < size) {
            size = newSize;
        }

        if (size < minTextSize) {
            size = minTextSize;
        }
    }

    view.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号