Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
SplitContainer
继承: Container < Control < CanvasItem < Node < Object
派生: HSplitContainer, VSplitContainer
将两个子控件垂直或水平排列的容器,提供了用于调整它们之间分隔比例的抓取器。
描述
用于水平或垂直排列子控件的容器,还会在它们之间创建抓取器。可以拖动抓取器来改变子控件之间的大小关系。
教程
属性
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法
void |
clamp_split_offset(priority_index: int = 0) |
主题属性
|
||
|
||
|
||
|
||
|
||
|
||
信号
drag_ended() 🔗
用户结束拖拽时发出。
drag_started() 🔗
用户开始拖拽时发出。
当用户拖动任意拖动器时发出。
枚举
enum DraggerVisibility: 🔗
DraggerVisibility DRAGGER_VISIBLE = 0
当 autohide 为 false 时,拆分拖动器始终可见,否则仅在鼠标在拖动器上悬停时可见。
抓取器图标的大小决定了最小间隔 separation。
抓取器图标如果比拆分条长,就会自动隐藏。
拆分拖动器图标始终不可见,无视 autohide 的值。
抓取器图标的大小决定了最小间隔 separation。
拆分拖动器图标不可见,拆分条粗细折叠为零。
属性说明
如果为 true,则会禁用拖动器,子节点会根据所有 split_offsets 都为 0 时的情况来调整大小。
bool drag_area_highlight_in_editor = false 🔗
高亮拖动区域 Rect2,便于在开发时查看位置。dragging_enabled 为 true 时拖动区域为金色,为 false 时则为红色。
int drag_area_margin_begin = 0 🔗
减少可拖动区域和拆分条 split_bar_background 在容器起始侧的大小。
int drag_area_margin_end = 0 🔗
减少可拖动区域和拆分条 split_bar_background 在容器结尾侧的大小。
将拖动区域在容器轴向上进行偏移,防止拖动区域与 ScrollBar 或其他子节点的可选中 Control 发生重叠。
bool drag_nested_intersections = false 🔗
在两个 SplitContainer 的拖动器交界处添加额外的拖动器,以允许同时拖动两者。必须将两个 SplitContainer 的该属性都设置为 true,且其中一个必须是另一个的子节点(后代)。它们还必须是正交的(它们的 vertical 属性不同),并且后代节点必须紧邻祖先节点的至少一个拖动器(在 minimum_grab_thickness 范围内)。
DraggerVisibility dragger_visibility = 0 🔗
void set_dragger_visibility(value: DraggerVisibility)
DraggerVisibility get_dragger_visibility()
决定拖动器是否可见。该属性无法决定拖动器是否启用,这一需求请使用 dragging_enabled。
bool dragging_enabled = true 🔗
启用或禁用拆分拖拽。
已弃用: Use split_offsets instead. The first element of the array is the split offset between the first two children.
split_offsets 的第一个元素。
PackedInt32Array split_offsets = PackedInt32Array(0) 🔗
void set_split_offsets(value: PackedInt32Array)
PackedInt32Array get_split_offsets()
每个拖动器的偏移量,单位为像素。每个都是拖动器前后 Control 节点分割的偏移量,0 为默认位置。默认位置基于 Control 节点的扩展标志和最小大小。请参阅 Control.size_flags_horizontal、Control.size_flags_vertical 和 Control.size_flags_stretch_ratio。
如果拖动器前面的所有 Control 节点都没有扩展,则默认位置位于 SplitContainer 的起始位置。如果拖动器后面的所有 Control 节点都没有扩展,则默认位置位于 SplitContainer 的末尾。如果拖动器位于两个已扩展的 Control 节点之间,则默认位置将位于中间,具体位置取决于 Control.size_flags_stretch_ratio 和最小大小。
注意:如果分割偏移量导致 Control 节点重叠,则在确定位置时将优先使用第一个分割。
Note: The returned array is copied and any changes to it will not update the original property value. See PackedInt32Array for more details.
bool touch_dragger_enabled = false 🔗
如果为 true,则会启用适合触控的拖动手柄,方便在小尺寸屏幕上使用。与标准抓取器不同,这个拖动手柄与 SplitContainer 的子节点存在重叠,不会影响它们的最小间隔。启用该选项时不再绘制标准抓取器。
如果为 true,则该 SplitContainer 会垂直排列其子代,而不是水平排列。
在使用 HSplitContainer 和 VSplitContainer 时无法改变。
方法说明
void clamp_split_offset(priority_index: int = 0) 🔗
钳制 split_offsets 的值以确保它们位于有效范围内且彼此不重叠。重叠时该方法会通过将所有重叠的分割偏移量钳制到该范围,以优先考虑某个分割偏移量(位于索引 priority_index 处)。
Control get_drag_area_control() 🔗
已弃用: Use the first element of get_drag_area_controls() instead.
返回拖拽区域 Control。例如你可以把一个预先配置好的按钮放到拖拽区域 Control 中,这样这个按钮就会跟随拆分条移动。调用 reparent() 前请尝试将 Button 的锚点设置为 center。
$BarnacleButton.reparent($SplitContainer.get_drag_area_control())
注意:拖拽区域 Control 绘制在 SplitContainer 的子节点之上,因此 Control 调用 CanvasItem 绘制方法所绘制的内容和添加至 Control 的子节点也会显示在 SplitContainer 的子节点之上。如果需要阻止鼠标拖动,请尝试将自定义子节点的 Control.mouse_filter 设置为 Control.MOUSE_FILTER_IGNORE。
警告:这是必要的内部节点,将其移除或释放都可能造成崩溃。
Array[Control] get_drag_area_controls() 🔗
返回拖拽区域 Control 的 Array。这些是每个子节点之间可交互的 Control 节点。例如,可以使用该方法将预配置的按钮添加到拖拽区域 Control,使其随分割条一起移动。尝试在调用 Node.reparent() 之前将 Button 的锚点设置为 center。
$BarnacleButton.reparent($SplitContainer.get_drag_area_controls()[0])
注意:拖拽区域 Control 绘制在 SplitContainer 的子级之上,因此从拖拽区域调用的 CanvasItem 绘制对象以及添加到它的子对象也会出现在 SplitContainer 的子级之上。如果需要,可以尝试将自定义子级的 Control.mouse_filter 设置为 Control.MOUSE_FILTER_IGNORE 以防止阻止鼠标拖动。
警告:这些是必要的内部节点,将其移除或释放都可能造成崩溃。
主题属性说明
Color touch_dragger_color = Color(1, 1, 1, 0.3) 🔗
触摸拖动器的颜色。
Color touch_dragger_hover_color = Color(1, 1, 1, 0.6) 🔗
触摸拖动器悬停状态的颜色。
Color touch_dragger_pressed_color = Color(1, 1, 1, 1) 🔗
触摸拖动器按下状态的颜色。
布尔值。如果为 1(true),则当抓取器不在光标下方时会自动隐藏。如果为 0(false),则抓取器始终可见。dragger_visibility 必须设置为 DRAGGER_VISIBLE。
int minimum_grab_thickness = 6 🔗
拆分条上用户可点击抓取区域的最小厚度。能够确保拆分条在 separation 或 h_grabber / v_grabber 过窄、难以选中时仍然可以拖动。
拆分条的粗细,即容器中每个子节点的间隙。如果 dragger_visibility 为 DRAGGER_VISIBLE 或者为 DRAGGER_HIDDEN 的同时 separation 比抓取器图标相应方向的大小要小,这个粗细就会被抓取器图标的大小覆盖。
注意:如果要让 separation 比抓取器图标大小要小,例如想要设成 1 px 的细线,请将 h_grabber 或 v_grabber 设为新的 ImageTexture,这样就把抓取器图标的大小设为了 0 px。
用于在分隔条绘制的抓取器的图标。仅在 HSplitContainer 和 VSplitContainer 中使用。对于 SplitContainer,见 h_grabber 和 v_grabber。
vertical 为 false 时绘制在分隔条的抓取器图标。
touch_dragger_enabled 为 true 且 vertical 为 false 时拖拽手柄所使用的图标。
touch_dragger_enabled 为 true 时用于拖放手柄的图标。仅在 HSplitContainer 和 VSplitContainer 中使用。对于 SplitContainer,见 h_touch_dragger 和 v_touch_dragger。
vertical 为 true 时绘制在分隔符的抓取器图标。
touch_dragger_enabled 为 true 且 vertical 为 true 时拖拽手柄所使用的图标。
StyleBox split_bar_background 🔗
决定拆分条厚度大于零时的背景。