轉自: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