egret GUI 文本混排+文本链接的聊天解决方案【取巧法】

本文探讨了如何在使用Label组件时遇到Scroller组件限制的问题,提出通过Group容器来解决Label无法直接作为Scroller viewport的问题,并详细解释了相关代码实现,包括Label的属性设置、事件处理及文本高度的动态调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ui方面:

<e:Scroller verticalScrollPolicy="auto" width="468" height="620" x="6" y="110">
                <e:Group id="messageGroup">
                        <e:Label id="message_area" width="468" height="620"/>
                </e:Group>
        </e:Scroller>
View Code

使用Label的原因:TextArea不支持textFlow属性,虽然你追踪TextArea最终还是用TextField,并且你最终也可以使用TextField的textFlow属性,但是很麻烦。

套一个Group是因Label不能直接作为Scroller的viewport,然后Group外面再套一层Scroller,这样L可以上下移动Label了,当前的设置Scroller的尺寸以规定他的可视范围。

 

代码中:

this.message_area._textField.touchEnabled = true;
this.message_area.textFlow = 你的textFlow;
this.message_area.commitProperties();
            this.message_area.height = this.message_area._textField.textHeight;
View Code

Label没有TEXTEVET.LINK事件,而Label的textField的鼠标事件又被禁止了,所以需要自己去设置textField的touchEnable为true;

然后在给Label添加textFlow之后需要即时的commitProperties(),如果不调用这个方法的话,估计需要等到下一帧textFlow才会传递到textField去,这样也拿不到他的文本高度和textFlow生效后的高度;

var sv = this.message_area.height - scroller.height;
            if( sv > 0){
                this.messageGroup.verticalScrollPosition = sv;
                this.scroller._updateContentPosition();
            }
View Code

以上代码是当文本高度超过scroller的高度的时候主动将他滚动到最下面。

 

效果图:

转载于:https://www.cnblogs.com/adoontheway/p/5041024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值