类型 函数 库 widget.* 返回值 SegmentedControlWidget 修订 版本 2024.3703 关键词 widget, segment, segmentedControl, control 另请参阅 SegmentedControlWidget
创建一个 SegmentedControlWidget 对象。
为了节省纹理内存,SegmentedControlWidget 只能从 图像表单 创建。
SegmentedControlWidget 对象不支持 缩放,也不支持通过 .width 或 .height 更改宽度/高度。
SegmentedControlWidget 对象不支持在创建后更改 anchorX 或 anchorY 属性。
widget.newSegmentedControl( options )
此函数接受一个参数 options
,它是一个包含以下参数的表:
字符串。要分配给分段控件的可选标识。默认为 widget_segmentedControl
。
数字。控件x 和 y 中心点的坐标。如果定义了 left
和 top
值,则这些值将被覆盖。
数字。将在其中创建控件的左侧和顶部位置。如果指定,这些值将覆盖 x
和 y
参数。
数字。每个段的宽度(以像素为单位)(所有段的宽度必须相等)。默认为 50
。
表。逗号分隔字符串的表,定义了段总数和每个段上显示的标签。例如
segments = { "Item 1", "Item 2", "Item 3", "Item 4" }
数字。初始创建时将处于活动状态的段。默认为第一个段。
侦听器。按下某个段时要调用的可选函数。回调函数不需要测试 event.phase
,因为它只接受 began
。
数字。段标签的字体大小(以像素为单位)。默认为 12
。
字符串。段标签使用的字体。默认为 native.systemFont。
表。包含两个 RGB+A 颜色设置的表,分别用于非活动(default
)和活动(over
)状态。
labelColor = { default={ 1, 1, 1 }, over={ 0, 0, 0, 0.5 } }
布尔值。如果设置为 true
,则按钮标签将显示为浮雕(嵌入效果)。
数字。段标签的可选 x 和 y 偏移量。例如,labelYOffset = -8
会将标签从默认位置向上移动 8 个像素。
可以使用 图像表单 中的 7 个帧来自定义分段控件的视觉效果。如下例所示,可以使用其中 6 个帧为每个段组装非活动和活动状态。非活动帧由左端盖(红色)、中间跨度(绿色)和右端盖(黄色)组成。活动帧由左端盖(橙色)、中间跨度(蓝色)和右端盖(紫色)组成。
根据段的宽度,左端盖和右端盖保持图像表单中规定的尺寸,而中间帧(绿色或蓝色)将拉伸以填充每个段的剩余宽度。
可选地,分段控件接受每个段之间的分隔线,在本例中显示为深蓝色条。如果已定义,分隔线将覆盖其他帧,并均匀分布在分段控件的整个跨度上。如果您不希望显示分隔线,只需在控件声明中省略三个关联的属性即可。
![]() |
→ | ![]() |
ImageSheet。分段控件的 图像表单 对象。
数字。主段帧(端盖和中间跨度)的宽度/高度。所有这些帧应具有相同的宽度和高度。
数字。左端盖的非活动和活动帧。
数字。中间跨度的非活动和活动帧。
数字。右端盖的非活动和活动帧。
数字。分隔线帧的帧索引。如果您不希望显示分隔线,请省略此项。
数字。分隔线帧的宽度/高度。如果定义了 dividerFrame
,则这些是必需的。
local widget = require( "widget" ) -- Listen for segmented control events local function onSegmentPress( event ) local target = event.target print( "Segment Label is:", target.segmentLabel ) print( "Segment Number is:", target.segmentNumber ) end -- Create a default segmented control local segmentedControl = widget.newSegmentedControl( { left = 50, top = 150, segmentWidth = 150, segments = { "Item 1", "Item 2", "Item 3", "Item 4" }, defaultSegment = 2, onPress = onSegmentPress } )
local widget = require( "widget" ) -- Listen for segmented control events local function onSegmentPress( event ) local target = event.target print( "Segment Label is:", target.segmentLabel ) print( "Segment Number is:", target.segmentNumber ) end -- Image sheet options and declaration -- For testing, you may copy/save the image under "Visual Customization" above local options = { frames = { { x=0, y=0, width=40, height=68 }, { x=40, y=0, width=40, height=68 }, { x=80, y=0, width=40, height=68 }, { x=122, y=0, width=40, height=68 }, { x=162, y=0, width=40, height=68 }, { x=202, y=0, width=40, height=68 }, { x=245, y=0, width=4, height=68 } }, sheetContentWidth = 250, sheetContentHeight = 68 } local segmentSheet = graphics.newImageSheet( "widget-segmented-control.png", options ) -- Create a custom segmented control local segmentedControl = widget.newSegmentedControl( { left = 50, top = 150, sheet = segmentSheet, leftSegmentFrame = 1, middleSegmentFrame = 2, rightSegmentFrame = 3, leftSegmentSelectedFrame = 4, middleSegmentSelectedFrame = 5, rightSegmentSelectedFrame = 6, segmentFrameWidth = 40, segmentFrameHeight = 68, dividerFrame = 7, dividerFrameWidth = 4, dividerFrameHeight = 68, segmentWidth = 90, segments = { "Item 1", "Item 2", "Item 3", "Item 4" }, defaultSegment = 1, labelColor = { default={1,1,1,1}, over={1,0.3,0.8,1} }, onPress = onSegmentPress } )