字體大小自適應的TextView

緣起

開發中經常會遇到這樣的情況,某天你心情正好的時候,產品拿著某臺設備跑過來告訴你,快看這里的文字顯示不下了,開發會說:擦,你這個字太長了啊,當然就顯示不下了。然后產品會說:你看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);
    }

算是一個快速解決問題能用的方案,供參考。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,076評論 25 708
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,491評論 2 45
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,200評論 4 61
  • 停留的自行車旁邊, 盛開著團團薔薇 一切, 仿佛像昨天 或許, 它們終會被時光埋沒 但是, 它們也會認真譜寫最后一...
    糖小嗷閱讀 355評論 1 3
  • 人在情在,人還在情也許在,人剛不在,情也許即斷。 人性有時比冰還冷,比豺狼的撕咬還讓讓疼痛。 劉小秀沒想到丈夫李君...
    天空有云閱讀 562評論 2 27