申明

本指南翻译自 Google Blockly 官方文档。


默认情况下,AbstractBlocklyActivity 用一个大的工作区(workspace)填充整个屏幕。这个工作区由 blockly_unified_workspace.xml 来定义,布局上将工作区、工具箱和垃圾桶组合在一起。

enter image description here

这个布局由onCreateContentView() 方法加载到 Activity 中:

protected View onCreateContentView(int containerId) {
    return getLayoutInflater().inflate(R.layout.blockly_unified_workspace, null);
}

在程序中可以重载此方法以使用自己的视图。在 SplitActivityTurtleActivity 中可以找到两个相关示例:

Override
protected View onCreateContentView(int parentId) {
    View root = getLayoutInflater().inflate(R.layout.split_content, null);
    mGeneratedTextView = (TextView) root.findViewById(R.id.generated_code);

    return root;
}

这两种情况下,修改后的布局都是在效果预览视图的旁边简单地引用了 blockly_unified_workspace.xml 的布局。

<include layout="@layout/blockly_unified_workspace" />

直接引用 Blockly UI

虽然 blockly_unified_workspace 可以轻松地在 Blockly 工作区旁边添加一些额外的 UI,但通过直接添加 Blockly UI 可以实现更高级的布局。

AbstractBlocklyActivity 中的默认实现是使用 BlocklyActivityHelper,它会查找以下 fragment 的ID:

在 Activity 中可以覆盖 onCreateContentView() 方法来构建或扩充任何布局,并且可以将这些 fragment 放置在任何位置。使用包含这些 fragment 的自定义布局示例可以在 FlyoutDemos 的 Activity 中找到。

有关 fragment 的配置选项和 XML 布局属性的详细信息,请查看上述每个 fragment 的 JavcDoc 文档。

有关示例请查看:blockly_unified_workspace.xml

控制按钮

除了 fragment 之外,BlocklyActivityHelper 还会查找四个 View 的 ID 作为按钮。

blockly_unified_workspace 中,这些按钮堆叠在工作区的右侧(或在左侧,从右到左的语言中)。

enter image description here