【UE·UI篇】ListView使用经验总结

这篇文章用来记录我在使用ListView遇到的一些问题和经验。 虽然是写的ListView,不过TileView、ScrollBox组件大部分经验也能适用。
github工程

关于ListView的基本使用前人总结过不少:


关于ListView的滚动条(ScrollBar)

ListView的滚动条丑不拉几的,所以经常会有以下需求:

如何关闭滚动条的显示?

调用方法SetScrollBarVisibility。参数是ESlateVisiblity,设成Collapsed即可。
在这里插入图片描述
如何想要不运行就能在蓝图里预览,请连上EventPreConstruct
在这里插入图片描述

如何自定义滚动条的样式?

UE自带的ListView不支持
如果硬要做就必须改源码或者从头自己写一个ListView。(UE你给点劲儿啊,Unity的UGUI都比你好用多了。。。)
在这里插入图片描述


关于ListView的滚动功能

如何实现鼠标左键滚动?

ListView、TileView、ScrillBox这种带滚动条的自带鼠标右键滚动。但是我就是想左键滚动,也有办法。
方法1

  • ProjectSetting中勾选UseMouseForTouch。Touch就是手机、平板等设备的触屏功能。没错这些带滚动条的组件是支持触屏滚动的,所以只要把鼠标模拟Touch选上就行。勾上以后屏幕会出现一个很丑的虚拟摇杆,把DefaultTouchInterface设为空即可。
    在这里插入图片描述

方法2

  • 调用SetScrollOffset函数可以设置滚动条偏移。然后检测鼠标是否在UI上,再根据滑动的值来增加或者减少这个偏移量。这个做起来就很麻烦了。时间有限我就只研究了下这个SetScrollOffset的参数是干嘛用的。这个偏移的取值范围是0到ListView子物体的个数。它的效果可以演示如下:

在这里插入图片描述

如果是TileView这种一行有多列的是这个情况:
在这里插入图片描述

如何让ListView子物体滚到视野中?

  • 调用ScrollItemIntoView。将特定子物体滚到视野中
  • 调用ScrollIndexIntoView。将第几个子物体滚到视野中。

子物体有Button导致ListView不能滚动了怎么办?

找到Button的Interaction里的ClickMethod和TouchMethod选择Precisexxx那个选项。意思是精确点击。也就是说当你点击Button然后进行滑动时这个时候不会触发Button事件而会触发滑动事件。而当你松开时才会触发Button事件。
在这里插入图片描述


基本上想到的就这些了,如果有别的以后还会补充。
顺便多说几句,关于用Touch来实现鼠标左键滑动的功能我是怎么想出来的。所谓授人以鱼不如授人以渔嘛。

一开始谷歌“ue leftclick scroll”也好,“ue scroll without scrollbar"都没有得到什么满意的结果。后来就开始看源码了。ListView引用了一个SListView,SListView又继承自STableViewBase。
在这里插入图片描述
然后在STableViewBase.h发现了这几个函数,
在这里插入图片描述
尝试断点,发现左键点击并不会走OnMouseEnter函数。然后看到OnTouch相关的函数。所以想到了用Touch来实现的思路。之后再搜索”"ue mouse touch**这几个关键词就得出了答案。

总结起来,开源真香

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/j756915370/article/details/116465616