Shield 中文文档 下载 App

界面布局为什么要用表来写

表就是界面

安卓原生的界面用 XML 写,掌上环境换成了更顺手的方案:用 Lua 表描述界面。表嵌表就是控件套控件,键值对就是属性。上一节给按钮接事件时你已经写过一小张了(见加一个按钮),这页把规则补全。

基本形状

layout = {
    LinearLayout,              -- 容器类型(导入过的类名直接用)
    orientation = "vertical",  -- 属性 = 值
    layout_width = "fill",
    {
        TextView,              -- 子控件
        text = "标题",
        id = "tv",
    },
    {
        Button,
        text = "确定",
        id = "btn",
        onClick = "click",     -- 值也可以写函数名字符串或函数变量
    },
}

三条核心规则:

  1. 第一项是控件类型:LinearLayout、TextView、Button 这些名字来自 import 进来的安卓类;
  2. 其余键值对是属性:支持绝大部分安卓控件属性;
  3. 嵌套的表是子控件:容器里塞几个表就有几个子项。

两个省事的简写

特殊属性的取值

跟 loadlayout 配合

main = {}
activity.setContentView(loadlayout(layout, main))

第二个参数是「收纳表」:所有带 id 的控件都会被装进去,之后 main.tv、main.btn 取用。也可以不传,控件直接以全局变量存在(以实际版本行为为准)。

写完的布局跑起来位置不对、控件挤成一团时,先把 orientation 换个方向、给控件加 padding 试——多数排版问题出在容器选错。界面之外的脚本能力,进常用模块。