自适应字体大小的TextView

思路:在字体改变时,重新计算行数,和宽高

Paste_Image.png
  private void refitText(String text, int textWidth, int textHeight) {
        if (textWidth > 0 && textHeight > 0) {
            /**
             * 当前的宽高
             */
            int currentWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight();
            int currentHeight = textHeight - this.getPaddingBottom() - this.getPaddingTop();
            //by the line calculate allow displayWidth
            int autoWidth = currentWidth;
            float mult = 1f;
            float add = 0;
            if (Build.VERSION.SDK_INT > 16) {
                mult = getLineSpacingMultiplier();
                add = getLineSpacingExtra();
            } else {
                //the mult default is 1.0f,if you need change ,you can reflect invoke this field;
            }
            float trySize = maxTextSize;
            mTextPaint.setTextSize(trySize);
            int oldline = 1, newline = 1;
            //计算最大宽高
            while ((trySize > minTextSize)) {
                //拿到一行字体所占的宽
                int displayW = (int) mTextPaint.measureText(text);
                //拿到一行字体所占高
                int displaH = round(mTextPaint.getFontMetricsInt(null) * mult + add);
                if (displayW < autoWidth) {
                    break;
                }
                //计算最大行数
                newline = currentHeight / displaH;
                //如果行数改变了,重新计算宽度
                if (newline > oldline) {
                    oldline = newline;
                    autoWidth = currentWidth * newline;
                    continue;
                }
                //try more small TextSize
                trySize -= 1;
                if (trySize <= minTextSize) {
                    trySize = minTextSize;
                    break;
                }

                mTextPaint.setTextSize(trySize);
            }
            //setMultiLine
            if (newline >= 2) {
                this.setSingleLine(false);
                this.setMaxLines(newline);
            }
            this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,252评论 4 61
  • 寒假来了,春节也快来了,你是否每天准备在刷微信,抢红包,吃美食中度过寒假生活呢? 每逢佳节胖三斤,春节更是三公斤,...
    esir李阅读 441评论 0 0
  • 小时候我們总是期待着快点长大,☞偷偷穿妈妈的高跟鞋,抹口红。这些举措在我们这已经屡见不鲜,可当你真的要脱离她们时,...
    明媚女孩阅读 175评论 0 0
  • 多年前的今天,你走了,本来以为你只是跟我们开了一个玩笑,可是你没有。 那以后每一年的今天,我都会刻意的去重温你的歌...
    清风明月照牡丹阅读 752评论 0 2
  • 淅淅沥沥的小雨从夜里持续不断,风声也在外呼啸了一整晚。尽管是天明时刻,天气还是一样的阴沉,甚冷,颇寒。 洗刷完...
    小二不2阅读 383评论 0 4