TextEllipsis.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. public static class TextEllipsis
  7. {
  8. //超框显示
  9. //public static void SetTextWithEllipsis(this Text textComponent, string value) {
  10. // TextGenerator generator = new TextGenerator();
  11. // var settings = textComponent.GetGenerationSettings(textComponent.rectTransform.rect.size);
  12. // generator.Populate(value, settings);
  13. // var characterCountVisible = generator.characterCountVisible;
  14. // var updatedText = value;
  15. // if (value.Length > characterCountVisible)
  16. // {
  17. // updatedText = value.Substring(0, characterCountVisible);
  18. // updatedText += "…";
  19. // }
  20. // //Debug.Log(value + ",文本宽度为:" + generator.GetPreferredWidth(value, settings)+",width:"+ textComponent.rectTransform.rect.width);
  21. // textComponent.text = updatedText;
  22. //}
  23. //加个判断文字charVisible
  24. public static void SetTextWithEllipsis(this Text textComponent, string value)
  25. {
  26. var rect = textComponent.rectTransform.rect;
  27. //Debug.Log($"[SetTextWithEllipsis] Text: {value}, Rect: {rect.width}x{rect.height}");
  28. //if (rect.width <= 1f || rect.height <= 1f)
  29. //{
  30. // Debug.LogWarning("Text rect is too small or not initialized yet.");
  31. //}
  32. TextGenerator generator = new TextGenerator();
  33. var settings = textComponent.GetGenerationSettings(rect.size);
  34. // 明确设置字体
  35. settings.font = textComponent.font;
  36. settings.fontSize = textComponent.fontSize;
  37. settings.fontStyle = textComponent.fontStyle;
  38. settings.scaleFactor = textComponent.canvas.scaleFactor;
  39. settings.resizeTextForBestFit = false;
  40. bool success = generator.Populate(value, settings);
  41. //Debug.Log($"Populate success: {generator.Populate(value, settings)}, characterCountVisible: {generator.characterCountVisible}, textLength: {value.Length}");
  42. //Debug.Log($"Font: {settings.font}, FontSize: {settings.fontSize}, Rect: {textComponent.rectTransform.rect.size}, ResizeText: {settings.resizeTextForBestFit}");
  43. string updatedText = value;
  44. var charVisible = generator.characterCountVisible;
  45. if (value.Length > charVisible && charVisible > 0)
  46. {
  47. int safeLength = Math.Max(0, charVisible - 1);
  48. safeLength = Math.Min(safeLength, value.Length);
  49. updatedText = value.Substring(0, safeLength) + "…";
  50. }
  51. textComponent.text = updatedText;
  52. }
  53. }