pkg.go.dev · import "github.com/chhongzh/lilt/widget"
建立在 ui 之上的标准组件。所有构造函数最后一个参数都是 ...ui.Option,下面的选项和任何 ui.Option 都能传进去。
事件与 Control
签名
说明
详见
type Control struct
可交互组件嵌入它,得到回调、Busy 和 Loading 状态
线程模型
func (c *Control) OnClick[F ClickFunc](fn F)
设置激活时运行的回调
Button
func (c *Control) OnChange[F ChangeFunc](fn F)
设置用户改值后运行的回调,参数是旧值和新值;类型和组件的值类型不符时 panic
线程模型
func (c *Control) Busy() bool
回调是否还在运行
线程模型
func (c *Control) Loading() bool
回调是否已运行超过 150ms,组件正在显示加载点
Button
type ClickFunc interface
OnClick 回调的类型:func() 或 func() error,返回 error 表示失败
Button
type ChangeFunc interface
OnChange 回调的类型,见下
线程模型
func OnClick[F ClickFunc](fn F) ui.Option
选项版的 OnClick,用于嵌入了 Control 的组件
激活
func OnChange[F ChangeFunc](fn F) ui.Option
选项版的 OnChange
线程模型
ChangeFunc 允许的回调类型,以及哪些组件报告哪种值:
type ChangeFunc interface {
func ( from , to bool ) | func ( from , to bool ) error | // CheckBox
func ( from , to int ) | func ( from , to int ) error | // Choice、Select、RadioGroup
func ( from , to string ) | func ( from , to string ) error | // Input
func ( from , to uint32 ) | func ( from , to uint32 ) error // Toggles,第 i 位是第 i 个 Chip
}
回调返回 error 时,值类组件恢复旧值。widget 包以外的组件嵌入 Control 拿不到这套机制,见自定义组件 。
通用选项与能力接口
选项按接口生效:节点有对应的方法就能用,没有就 panic。
签名
说明
详见
func Font(f *gfx.Font) ui.Option
设置 Label 或组件内部文字的字体,要求 FontSetter
Label
func TextColor(c gfx.Color) ui.Option
文字颜色,要求 Colorer
Label
func TextAlign(x float32) ui.Option
水平对齐,0 靠左到 1 靠右,要求 Aligner
Label
func MarqueeMode(m Marquee) ui.Option
跑马灯模式,只用于 *Label
跑马灯
func Trailing(t ui.Node) ui.Option
在行尾放一个节点,要求 Trailer
ListItem
func HoldToConfirm(dur time.Duration) ui.Option
按住 dur 才触发,只用于 *Button
Button
type FontSetter interface{ SetFont(f *gfx.Font) }
能换字体
Label
type Colorer interface{ SetColor(c gfx.Color) }
能换文字颜色
Label
type Aligner interface{ SetAlign(x float32) }
能水平对齐文字
Label
type Texter interface{ Text() string; SetText(s string) }
有一行文字,例如 Label
Label
type Trailer interface{ SetTrailing(d ui.Node) }
能在行尾放节点
ListItem
Label
签名
说明
详见
func NewLabel(text string, opts ...ui.Option) *Label
一行文字,在盒子里垂直居中
Label
func (l *Label) Text() string、SetText(s string)
读写文字
Label
func (l *Label) Font() *gfx.Font、SetFont(f *gfx.Font)
字体,未设置时用主题的 Font
Label
func (l *Label) SetColor(c gfx.Color)
覆盖主题的前景色
Label
func (l *Label) SetAlign(x float32)
水平对齐
Label
func (l *Label) SetMarquee(m Marquee)
跑马灯模式
跑马灯
type Marquee uint8
放不下的 Label 何时滚动
跑马灯
MarqueeFocused
默认:自己或祖先有焦点时滚动
跑马灯
MarqueeAlways
一直滚动
跑马灯
Label 的 Draw、Measure、Update、Leaf
ui 能力接口的实现,由框架调用
能力接口
签名
说明
详见
func NewList(opts ...ui.Option) *List
纵向滚动的一列,ui.Add 把行加进去;默认铺满父节点
List
func (l *List) Column() *ui.Flex
放行的那一列,用来调间距和对齐
List
func NewListItem(title string, opts ...ui.Option) *ListItem
可聚焦的一行:标题加可选的尾部节点
ListItem
func (li *ListItem) Title() *Label
标题
ListItem
func (li *ListItem) SetFont(f *gfx.Font)
标题字体
ListItem
func (li *ListItem) SetTrailing(d ui.Node)
换掉尾部节点
ListItem
ListItem 的 HandleKey、Update、DrawOver
能力接口的实现:松开 OK 时激活,加载时尾部滑走、换成加载点
能力接口
func NewScroll(content ui.Node, axes Axes, opts ...ui.Option) *Scroll
裁剪 content 并按方向滚动
Scroll
type Axes uint8
滚动方向
Scroll
ScrollVertical、ScrollHorizontal、ScrollBoth
纵向、横向、两个方向
Scroll
func (s *Scroll) Content() ui.Node
ui.Add 实际添加到的节点
Scroll
func (s *Scroll) ScrollPosition() ui.Vec2
沿 x、y 已滚动的距离
Scroll
func (s *Scroll) SetScrollBar(show bool)
显示或隐藏边缘的滚动条
Scroll
func (s *Scroll) SetStagger(f float32)
离焦点每远一步跟得慢多少,0 整体移动
波浪
Scroll 的 ArrowScroll、Reveal、HandlePointer、MeasureChildren、ArrangeChildren、DrawOver
能力接口的实现:方向键滚动、焦点跟随、拖动、布局、滚动条
嵌套滚动 、边缘回弹
签名
说明
详见
func NewButton(text string, opts ...ui.Option) *Button
带边框的按钮,松开 OK 时运行 OnClick
Button
func (b *Button) Label() *Label
按钮里的文字
Button
func (b *Button) SetFont(f *gfx.Font)
文字字体
Button
func (b *Button) SetHold(d time.Duration)
同 HoldToConfirm,0 关闭
Button
func (b *Button) CursorShape(r ui.Rect) ui.Rect
长按时从左边切掉光标
改变光标
Button 的 Draw、HandleKey、Update
能力接口的实现
能力接口
CheckBox 与 Radio
签名
说明
详见
func NewCheckBox(title string, checked bool, opts ...ui.Option) *CheckBox
松开 OK 切换勾选的一行,OnChange 收 bool
CheckBox
func (cb *CheckBox) Checked() bool
是否勾选
CheckBox
func (cb *CheckBox) SetChecked(v bool)
改勾选状态,不触发 OnChange
CheckBox
func NewRadioGroup(selected int) *RadioGroup
一组单选,-1 表示都不选;OnChange 收 int
Radio
func (g *RadioGroup) Selected() int
选中的序号
Radio
func (g *RadioGroup) Select(i int)
选中第 i 个,不触发 OnChange
Radio
func (g *RadioGroup) Radios() []*Radio
组里的所有行
Radio
func NewRadio(g *RadioGroup, title string, opts ...ui.Option) *Radio
属于 g 的一行;它的 OnClick 在组的 OnChange 之后运行
Radio
Select
签名
说明
详见
func NewSelect(title string, options []string, selected int, opts ...ui.Option) *Select
显示当前选项的一行,激活时打开一个单选的底部抽屉;OnChange 收 int
Select
func (s *Select) Selected() int
选中的序号
Select
func (s *Select) SetSelected(i int)
显示第 i 项,不触发 OnChange
Select
Chip、Choice 与 Toggles
签名
说明
详见
func NewChip(text string, opts ...ui.Option) *Chip
一个可开关的词,开着时下面有横条
Chip
func (c *Chip) On() bool、SetOn(on bool)
读、改开关,横条动画过渡
Chip
func (c *Chip) Label() *Label、SetFont(f *gfx.Font)
文字和字体
Chip
Chip 的 Draw、HandleKey、Update
能力接口的实现
能力接口
var ChipSpring = &anim.Spring{Response: 0.262, Damping: 0.5}
横条从中间长出、略超过文字宽度再落定的弹簧
Chip
func NewChoice(labels []string, chosen int, opts ...ui.Option) *Choice
一排 Chip 里恰好一个开着;OnChange 收旧、新序号
Choice
func (c *Choice) Chosen() int
选中的序号
Choice
func (c *Choice) Choose(i int)
切到第 i 个,不触发 OnChange;-1 全关
Choice
func (c *Choice) Chips() []*Chip、SetFont(f *gfx.Font)
所有 Chip;统一换字体
Choice
func NewToggles(labels []string, opts ...ui.Option) *Toggles
一排 Chip 任意开关;OnChange 收位掩码,最多 32 个
Toggles
func (t *Toggles) Mask() uint32、SetMask(m uint32)
读、改整组开关,第 i 位是第 i 个;SetMask 不触发 OnChange
Toggles
func (t *Toggles) On(i int) bool、SetOn(i int, on bool)
读、改单个,SetOn 不触发 OnChange
Toggles
func (t *Toggles) Chips() []*Chip、SetFont(f *gfx.Font)
所有 Chip;统一换字体
Toggles
Choice、Toggles 的 Update
能力接口的实现
能力接口
签名
说明
详见
func NewInput(placeholder string, opts ...ui.Option) *Input
单行输入框,激活时打开 ui.TextInput 或软键盘;OnChange 收旧、新文字
Input
func (in *Input) Text() string
当前文字
Input
func (in *Input) SetText(s string)
替换文字,不触发 OnChange
Input
func (in *Input) SetFont(f *gfx.Font)
字体
Input
Input 的 HandleKey、Update、DrawOver
能力接口的实现;直接接收物理键盘的字符和退格
物理键盘
type SoftKeyboard struct
从底部抽屉弹出的屏幕键盘,方向键用焦点查找在按键间移动
软键盘
func (k *SoftKeyboard) Open(t ui.TextTarget)
打开键盘编辑 t
软键盘
var Keyboard = &SoftKeyboard{}
ui.TextInput 为 nil 时 Input 使用的键盘
文字输入
弹窗
签名
说明
详见
func NewDrawer(edge Edge, title string, opts ...ui.Option) *Drawer
从屏幕一边滑入的一列,title 为空时没有标题
Drawer
func (d *Drawer) Open()、Close()
滑入、滑出;Open 在 UI goroutine 上调用
Drawer
func (d *Drawer) Edge() Edge
从哪一边滑入
Drawer
func (d *Drawer) Title() *Label
标题,没有时为 nil
Drawer
func (d *Drawer) TitleHeight() float32
标题占的高度,没有标题为 0
Drawer
type Edge uint8
抽屉的边
Drawer
Bottom、Top、Left、Right
下、上、左、右
Drawer
func NewDialog(title, message string, buttons ...*Button) *Dialog
屏幕中央的对话框:标题、一行消息、平分宽度的一排按钮;按钮回调成功返回后自动关闭
Dialog
func (d *Dialog) Open()、Close()
打开(第一个按钮获得焦点)、关闭;Open 在 UI goroutine 上调用
Dialog
func (d *Dialog) Title() *Label、Message() *Label
标题和消息
Dialog
func Toast(text string)
在底部显示 text 两秒,不抢焦点、不接按键,替换还在显示的 Toast;在 UI goroutine 上调用
Toast