Unity UGUI --- Text組件預先獲取文本的寬度和高度


轉自:https://blog.csdn.net/u010180140/article/details/104049958

原作者是用lua寫的。明白用什么接口就好,什么語言不重要。

給定文本內容給Text組建,預先知道Text占用的寬高

利用TextGenerator,TextGenerationSettings可以提前知道Text占用的寬高

function UIUtil.GetTextPreferredWidthAndHeight(cotent,fontSize)
    local font = ResourcesManager.GetAsset("font")
    local textGenerator = TextGenerator()
    local setting = TextGenerationSettings()
    setting.font = font
    setting.fontSize = fontSize
    setting.lineSpacing = 1
    setting.scaleFactor = 1
    setting.verticalOverflow = VerticalWrapMode.Overflow
    setting.horizontalOverflow = HorizontalWrapMode.Overflow
    
    local width = textGenerator:GetPreferredWidth(content,setting)
    local height = textGenerator:GetPreferredHeight(content,setting)
    
    return width,height
end

預先知道Text占用的寬高的作用

(1)開始知道了Text占用的寬,可以預先做好換行處理

(1)開始知道了Text占用的寬,可以預先做好字符串的處理,例如在聊天系統里面的最精聯系人一欄會有最近聯系人的頭像下會有最新的一條聊天信息,如果最新的那條信息超出了我們給定的寬度就要做截斷出來,超出來的字符串用“…”替換

//預先獲取限制寬度的字符串加上“…”結尾

function UIUtil.GetLimitWidthClippedStr(str,fontSize,limitWidth)
    local charArr = StringUtil.StringToArray(str)
    local len = #charArr
    local ret = ""
    local retList = {}
    local line = 0
    for i = 0,len do
        local curStr = charArr[i]
        local width = UIUtil.GetTextPreferredWidthAndHeight(curStr,fontSize)
        line = line + width
        retList[#retList + 1] = curStr
        if line >= limitWidth then
            retList[#retList + 1] = "..."
            break
        end
    end
    ret = table.concat(retList,"")
    return ret
end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM