GoSurface —— 外壳
弹窗、底部面板和下拉菜单用的都是它。它负责安全区域、虚拟键盘、 常驻页眉页脚、滚动主体、谁是最上层窗口、焦点恢复、返回键的归属,以及拖动改变大小。
| 摆放方式 | 看起来是 | 用在哪里 |
|---|---|---|
CENTER | 屏幕中央的一张卡片 | 确认框、设置 |
BOTTOM | 从下方升起的面板 | 列表、管理页面 |
ANCHOR | 贴在某个控件旁边的卡片 | 下拉菜单、右键菜单 |
close_requested 之后要隐藏还是释放,
是拥有它的那个界面的事 —— 因为外壳无从知道它为什么被关闭(是保存后关闭,还是丢弃)。
GoSheet —— 从底部升起的页面
var sheet := GoSheet.new()
add_child(sheet)
sheet.open("背包")
sheet.toolbar().add_child(GoStyle.line_edit("搜索…"))
sheet.toolbar().visible = true
sheet.footer().add_child(GoStyle.button("关闭", sheet.close, GoStyle.Tone.PRIMARY))
sheet.footer().visible = true
它自带一个 CanvasLayer,因此能稳稳地盖在 HUD 之上。open() 会清空
主体,并关掉返回按钮和常驻行 —— 在一个无处可返回的界面上留一颗按不动的按钮,看上去就像坏了。
GoDialogs —— 可以 await 的确认框
if await dialogs.confirm("删除存档", "此操作无法撤销。"):
delete_save()
confirm(title, body, ok_text, cancel_text, extra, args, destructive) —— 正文之后的参数全都可选,
alert() 用法相同,只是只有一个按钮。不可撤销的操作请设置 destructive:
确认按钮会变成实心的 GoStyle.Tone.DANGER_SOLID 按钮。
在浅色主题上,带底色的危险文字必须一路压暗到近乎黑色才读得清;实心按钮则保持红底白字。
因为窗口是复用的,每次调用都会重新应用一遍色调;已经开着一个时再调
confirm(),会立刻返回 false。confirm_key() 接受翻译键。
按钮排布。 action_layout 默认是 VERTICAL(对长译文更安全),
HORIZONTAL 表示排成一行、各占一半宽度,AUTO 则只在两个标签都能在卡片一半宽度内单行放下时才排成一行,
否则上下堆叠。action_gap 是按钮之间的间距,body_gap 是按钮上方的间距 ——
把后者调得比按钮间距更大,问题和选项才会读成两个部分。只想改某一个对话框时,
在打开之前调用 set_next_action_layout()。按钮行是在对话框第一次打开时才构建的,
所以把 GoDialogs 放进自动加载也不会在启动时增加任何开销。
GoForm —— 限定最大宽度的表单
GoScroll —— 触摸滚动
里面只放一样东西。页眉和按钮行都该放在外面 —— 长列表绝不能把它们顶出屏幕。
use_panel_edge() 会把滚动条移进卡片已有的内边距里,同时内容保持原来的缩进。