动态创建组件

在轻语言安卓程序中,除了在设计器中可视化拖拽设计界面外,也可以在代码中动态创建组件,然后将其添加到窗口中。

动态创建组件的优点

  1. 灵活性

    • 动态创建组件允许开发者根据运行时条件(如用户输入、网络请求结果等)动态调整UI。

    • 可以更灵活地控制组件的属性和行为。

  2. 减少资源占用

    • 如果某些组件只在特定条件下显示,动态创建可以避免在XML中预先定义这些组件,从而减少资源占用。
  3. 动态布局

    • 当布局需要根据数据动态变化时(如列表项、网格布局等),代码创建组件可以更高效地实现。
  4. 复用性

    • 动态创建的组件可以封装成方法或类,便于复用。

适用场景

  1. 动态列表或网格

    • 当列表项或网格项的内容和数量不确定时(如从服务器获取数据),适合动态创建组件。
  2. 条件性UI

    • 当某些组件只在特定条件下显示时(如用户登录后才显示的按钮),适合动态创建。
  3. 自定义视图

    • 当需要创建复杂的自定义视图(如自定义图表、动态表格等),代码创建更灵活。
  4. 动态布局调整

    • 当布局需要根据屏幕尺寸、设备方向或用户设置动态调整时,代码创建更合适。
  5. 游戏或动画

    • 在游戏开发或需要频繁更新UI的场景中,动态创建组件可以更好地控制UI的变化。
  6. 减少XML嵌套

    • 当XML布局嵌套过深导致性能问题时,可以通过代码创建组件来优化布局结构。

使用方式

动态添加按钮

  • 在窗口中添加一个垂直滚动框组件(垂直滚动框1),根据用户输入的数量或指定数量动态创建多个按钮,并添加到垂直滚动框中。(注意:这里也可以直接添加到窗口根布局中、但是添加到根布局中需要手动计算位置,而垂直滚动框添加的组件会自动在滚动框从上到下排列,且添加的内容超过滚动框高度时、内容可以上下滑动)
函数 动态创建按钮并添加到滚动框(待创建数量 为 整数型)
    ' 使用循环创建
    变量循环(i = 0,待创建数量,1)
        ' 创建按钮对象、并设置相关属性
        变量 局_按钮 = 创建 按钮()
        局_按钮.标题 = "按钮" + i
        ' 设置当按钮被单击时,接收系统回调的匿名子函数
        局_按钮.置被单击回调((按钮源)->{
            弹出提示(局_按钮.标题 + " 被单击")
        })
        ' 将创建的按钮添加到垂直滚动框1中
        垂直滚动框1.添加组件(局_按钮)
    结束循环
结束 函数

动态创建自定义对话框

事件 按钮2.被单击(来源对象 为 视图)
    变量 msgBox = 创建 对话框()
    msgBox.标题 = "请选择"
    msgBox.信息 = "确定要提交当前已输入的信息吗?"
    msgBox.置按钮("确定","取消","")
    msgBox.触摸空白域关闭 = 假
    msgBox.置按钮被单击回调(&带选择结果信息框被关闭)
    msgBox.显示()
结束 事件

函数 带选择结果信息框被关闭(源对象 为 对话框,按钮索引 为 整数型)
    如果(按钮索引 == -1)
        弹出提示("你点击了确定")
    否则
        弹出提示("你点击了取消")
    结束 如果
结束 函数

动态使用时钟(不可视组件)

时钟是不可视组件,不可视组件可以添加到窗口中,但在运行时不会显示。

这里以通过代码的方式创建使用:

事件 按钮4.被单击(来源对象 为 视图)
    计次 = 0
    ' 动态创建时钟对象、并通过拉姆达回调方式执行周期事件
    变量 局_时钟1 = 创建 时钟()
    局_时钟1.时钟周期 = 1000
    局_时钟1.置周期事件回调((源对象)->{
        ' 注意:这里的计次只能为类成员变量
        计次 = 计次 + 2
        标签1.标题 = "局_时钟1:" + 计次
        ' 如果计次变量大于某个值则停止时钟,这里大于20
        如果(计次 > 20)
            局_时钟1.可用 = 假
        结束 如果
    })
    局_时钟1.可用 = 真
结束 事件

温馨提示

在轻语言安卓中,无论是可视组件还是不可视组件,都可以通过代码方式创建使用。