UGUI Text宽度自适应并设置背景

设置文本最佳宽度,该方法调用需要在设置完文本内容之后进行调用

        public int textSizeMinWidth = -1;
        public int textSizeMaxWidth = -1;

        private void SetTextSize()
        {
            Text targetText = textView;
            if (textSizeMaxWidth <= 0 || targetText == null )
                return;
            float minWidth = targetText.preferredWidth;

            //宽高都不缩放
            if (targetText.preferredWidth <= textSizeMaxWidth)
            {
                if (textSizeMinWidth > 0 && textSizeMinWidth < targetText.preferredWidth)
                {
                    targetText.rectTransform.sizeDelta = new Vector2(targetText.preferredWidth, targetText.rectTransform.sizeDelta.y);
                    return;
                }
                else return;
            }
                
            //宽度缩放,高度不变
            if (targetText.preferredWidth <= textSizeMaxWidth)
            {
                targetText.rectTransform.sizeDelta = new Vector2(targetText.preferredWidth, targetText.rectTransform.sizeDelta.y);
                return;
            }

            //宽度最大,高度缩放
            //设置最大宽度
            targetText.rectTransform.sizeDelta = new Vector2(textSizeMaxWidth, targetText.rectTransform.sizeDelta.y);
            //设置最优高度
            int textSizeHeight = Mathf.CeilToInt(targetText.preferredHeight);
            targetText.rectTransform.sizeDelta = new Vector2(textSizeMaxWidth, textSizeHeight);
            
        }

设置背景图片,localizeText是对语言处理多语言赋值的脚本,给Text组件设置完多语言后,调用事件OnSizeChagned,LocalizeTextBgImage注册改事件,从而触发背景图片显示尺寸刷新

 [RequireComponent(typeof(LocalizeText))]
    public class LocalizeTextBgImage : MonoBehaviour
    {
        [SerializeField] RectTransform bgImageTransform;
        
        public Vector4 offset;//背景图片相对文本便宜量 x:left,y:right,z:top,w:bottom
        LocalizeText localText; //
        RectTransform textTransform;

        void Awake()
        {
            localText = GetComponent<LocalizeText>();
            textTransform = this.GetComponent<RectTransform>();
            bgImageTransform.pivot = textTransform.pivot;
            bgImageTransform.anchorMax = textTransform.anchorMax;
            bgImageTransform.anchorMin = textTransform.anchorMin;
            localText.OnSizeChagned += SetBgm;
            
        }
                 
        /// <summary>
        /// 刷新背景图尺寸,offset 只能用于pivot为(0.5, 0.5)的Text组件,pivot为其他值的需要重新计算anchoredPosition偏移量
        /// </summary>
        void SetBgm()
        {
            bgImageTransform.sizeDelta = textTransform.sizeDelta;
            bgImageTransform.position = textTransform.position;
            
            if (offset != Vector4.zero)
            {
                Vector2 diffus = bgImageTransform.position - textTransform.position;
                bgImageTransform.sizeDelta = new Vector2(textTransform.sizeDelta.x - offset.x - offset.y, textTransform.sizeDelta.y - offset.z - offset.w);
                bgImageTransform.anchoredPosition = new Vector2(bgImageTransform.anchoredPosition.x + (offset.x - offset.y) / 2, bgImageTransform.anchoredPosition.y + (offset.w - offset.z) / 2);
            }

        }
    }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯过客TYGK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值