Android中集成blockly实现scratch编程

本指南适用于希望创建自己的应用程序并将Android集成为代码编辑器的Android开发人员。假定人们通常熟悉Blockly的用法,并且对使用Android Studio的Java和应用程序开发有基本的了解。
主要步骤是:
创建项目并配置活动
配置项目的依赖项
扩展AbstractBlocklyActivity并实现必要的方法。

。创建项目和活动
首先利用AndroidStdio新建一个空白项目。
无论哪种情况,都不需要使用活动生成布局文件。您的blockly活动最初将使用Blockly库提供的布局。
在新的你的AndroidManifest.xml文件,设置 windowSoftInputMode如下:

<application ...
    android:windowSoftInputMode="stateHidden|adjustPan"
    />

将windowSoftInputMode确保在关闭位置的键盘开始,即使有键盘输入字段。它还将确保打开键盘(或其他IME)时,工作区将平移以显示此类字段。
在AppTheme找到的应用程序中res/values/styles.xml,将父主题设置为BlocklyVerticalTheme。

<style name="AppTheme" parent="BlocklyVerticalTheme">
    <!-- Customize your theme here. -->
    ...
</style>

该父样式为块和字段配置了多个默认值。您可以在样式的定义中找到更多详细信息 。
二 、配置项目依赖项
打开项目的build.gradle文件,并确保它包含JCenter存储库。另外,请确保您包含用于Android支持和兼容性类的Google Maven存储库。由最新版本的Android Studio创建的项目文件应该已经具有此文件,如下所示:

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
}

直接从moven仓库引用。
接下来,build.gradle为您的应用程序打开文件,通常在 app/目录中。在dependencies块内,包括以下几行:

compile 'com.android.support:appcompat-v7:26.0.1'
compile 'com.android.support:recyclerview-v7:26.0.1'
compile 'com.android.support:support-v4:26.0.1'
compile 'com.google.blockly.android:blocklylib-vertical:0.9-beta.20180725'

三、实施活动基类
开发Android Blockly活动的最简单方法是扩展 AbstractBlocklyActivity,我们强烈建议您在第一个Blockly应用程序中使用它。该类具有一些您将需要覆盖的抽象方法,下面将详细介绍。下面的方法实现反映了 SimpleActivity中的实现,您可以将其用作参考。

getToolboxContentsXmlPath()
getToolboxContentsXmlPath()返回assets/定义工具箱内容的XML 的路径。

@Override
protected String getToolboxContentsXmlPath() {
    return "default/toolbox.xml";
}

getBlockDefinitionsJsonPaths()
getBlockDefinitionsJsonPaths()将assets/目录中的路径返回到块定义.json文件。以下实现导入了Blockly库提供的默认块。

@Override
protected List<String> getBlockDefinitionsJsonPaths() {
    List<String> assetPaths = new ArrayList<>(DefaultBlocks.getAllBlockDefinitions());
    // Append your own block definitions here.
    return assetPaths;
}

本DefaultBlocks 类包含Blockly的预定义块辅助功能。 getAllBlockDefinitions() 返回到预定义块的所有路径的数组。尽管最终会希望选择与应用程序相关的特定模块,并希望创建与运行时环境相关的模块,但这是一个容易上手的地方。

getGeneratorsJsPaths()
getGeneratorsJsPaths()将assets/目录中的路径返回到.js定义块实现的生成器文件。当前的实现包括Blockly默认块的所有JavaScript实现。

private static final List<String> JAVASCRIPT_GENERATORS = Arrays.asList(
    // Custom block generators go here. Default blocks are already included.
);

@Override
protected List<String> getGeneratorsJsPaths() {
    return JAVASCRIPT_GENERATORS;
}

getCodeGenerationCallback()
getCodeGenerationCallback()返回用于将生成的代码返回给应用程序的回调。在用户单击操作栏中的“运行/播放”按钮后调用。

CodeGenerationRequest.CodeGeneratorCallback mCodeGeneratorCallback =
        new LoggingCodeGeneratorCallback(this, "LoggingTag");

@Override
protected CodeGenerationRequest.CodeGeneratorCallback getCodeGenerationCallback() {
    return mCodeGeneratorCallback;
}

在此实现中,该应用为每个生成调用使用相同的生成器回调。这很常见,但不是必需的。
onInitBlankWorkspace()
虽然不是抽象方法,onInitBlankWorkspace()但如果您的应用程序包含,则当前需要定义可用的变量 default/variable_blocks.json。可变支持目前正在开发中。

@Override
protected void onInitBlankWorkspace() {
    // Initialize available variable names.
    getController().addVariable("item");
}
原创文章 81 获赞 48 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_15181569/article/details/104718518