直接调 Button.new(),内边距、高度和换行就会在不同界面之间一点点跑偏。
这种偏差在代码评审里看不出来,在截图里却一眼就能看到。
| 分组 | 函数 |
|---|---|
| 结构 | column row wrap_row padding spacer divider responsive_grid aspect foldable |
| 文字 | label label_key line section typography |
| 按钮 | button button_key icon_button list_button list_row apply_icon style_choice_card style_chip_button style_chip_label |
| 输入 | line_edit textarea toggle checkbox slider picker select dropdown radio_group segmented choice_grid |
| 展示 | card chip hud_panel chip_panel avatar skeleton alert table tabs breadcrumb progress empty_state |
| 浮层部件 | surface box floating disc face_padding |
| 辅助 | form fit_words natural_width tooltip_node card_body let_input_through |
box() 永远返回 StyleBoxFlat,因为调用方拿到它之后还要调整
bg_color 或 corner_radius。需要保住自定义形状时,请改用
surface()。
带说明的列表行
GoStyle.list_button(GoIconSet.SWORD, "守誓者", _inspect, Color.TRANSPARENT,
"长剑 / 攻击 42", false)
带第二行的行会获得上下相等的内边距,比单行的行更宽松,标题与说明这一组始终 与图标垂直居中对齐 —— 容器把行拉高时如此,说明换成好几行之后也是如此。整行仍然是一个点按目标。
medieval_light 下调用的是同样的工厂方法。会自动折行的一排控件
把控件按自然宽度放进 wrap_row。若保持换行开启,按钮的最小宽度会掉到几乎为零,
而这一排会按这个值来分配单元格 —— 标签于是被压成一行一个字。工厂方法替你挡住了这个问题。
永远别让空列表就这么空着
page.add_child(GoStyle.empty_state(GoIconSet.BOX, "这里还什么都没有"))
人看到一片空白,会当成坏了。
子类钩子
每一处构造子控件的地方都走的是可重写的方法,所以继承了 gohud 类型的项目, 不必复制代码就能把自己的子类用到控件内部。
| 钩子 | 控件 | 默认实现 |
|---|---|---|
_make_scroll() | GoCoachMark、GoSurface | GoScroll.new() |
_make_close_button() | GoPromptCard、GoSurface | GoIconButton.new() |
_make_surface() | GoSheet、GoDialogs | GoSurface.new() |
_should_pause() | GoCoachMark | 模态窗口打开期间隐藏卡片 |