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) — body 之後的全部
都是選用的,而 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() 會把捲軸移進卡片原有的內距裡,而內容仍保持它的縮排。