字体大小自适应的TextView

作者: tmp_zhao | 来源:发表于2016-07-02 16:04 被阅读5768次

    缘起

    开发中经常会遇到这样的情况,某天你心情正好的时候,产品拿着某台设备跑过来告诉你,快看这里的文字显示不下了,开发会说:擦,你这个字太长了啊,当然就显示不下了。然后产品会说:你看iOS是好的,看起来当文字太多的时候,字体变小了。之后Android开发就跑去问iOS开发你这个是怎么做到的,答曰:系统自带的功能,当显示不下时会自动缩小字号。Android开发表示心好累啊。。。没办法再怎么累,也得处理好这个问题。

    解决方案

    这个问题在Android开发中还是很普遍的,比如你在google中搜索"android textview auto font size",会看到一大堆关于这个问题的帖子,绝大部分都是网友在stackoverflow上的提问,比如像:

    How to adjust text font size to fit textview
    Auto Scale TextView Text to Fit within Bounds

    这2个问题竟然都是5、6年前问的。。。

    我自己的做法思路跟这些差不多,代码很简单,如下:

        private void adjustTvTextSize(TextView tv, int maxWidth, String text) {
            int avaiWidth = maxWidth - tv.getPaddingLeft() - tv.getPaddingRight() - 10;
    
            if (avaiWidth <= 0) {
                return;
            }
    
            TextPaint textPaintClone = new TextPaint(tv.getPaint());
            // note that Paint text size works in px not sp
            float trySize = textPaintClone.getTextSize();
    
            while (textPaintClone.measureText(text) > avaiWidth) {
                trySize--;
                textPaintClone.setTextSize(trySize);
            }
    
            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize);
        }
    

    算是一个快速解决问题能用的方案,供参考。

    相关文章

      网友评论

        本文标题:字体大小自适应的TextView

        本文链接:https://www.haomeiwen.com/subject/jruqjttx.html