字體大小自適應(yīng)的TextView

緣起

開發(fā)中經(jīng)常會遇到這樣的情況,某天你心情正好的時候,產(chǎn)品拿著某臺設(shè)備跑過來告訴你,快看這里的文字顯示不下了,開發(fā)會說:擦,你這個字太長了啊,當(dāng)然就顯示不下了。然后產(chǎn)品會說:你看iOS是好的,看起來當(dāng)文字太多的時候,字體變小了。之后Android開發(fā)就跑去問iOS開發(fā)你這個是怎么做到的,答曰:系統(tǒng)自帶的功能,當(dāng)顯示不下時會自動縮小字號。Android開發(fā)表示心好累啊。。。沒辦法再怎么累,也得處理好這個問題。

解決方案

這個問題在Android開發(fā)中還是很普遍的,比如你在google中搜索"android textview auto font size",會看到一大堆關(guān)于這個問題的帖子,絕大部分都是網(wǎng)友在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);
    }

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容