Get Started - Android


title: Get Started - Android

原文地址:https://developers.google.com/blockly/guides/get-started/android

开始

本指南面向希望创建自己的应用程序并将Blockly作为代码编辑器的Android开发人员。假设他们熟悉Blockly的使用,并且基本了解使用Android Studio的Java和应用程序开发。

主要步骤是:

  1. 下载并构建库.Download and build the library
  2. 创建项目并配置ActivityCreate the project and configure the activity
  3. 配置项目的依赖项Configure the project's dependencies
  4. 扩展AbstractBlocklyActivity并实现必要的方法Extend AbstractBlocklyActivity

结果将是你自己的应用程序,看起来像Blockly Simple演示,一个工具箱充满块和一个大工作空间。

Get the Code


首先,从GitHub下载源代码。如果您知道如何使用Git或Subversion,我们强烈建议从我们的存储库同步,以便您的代码保持最新
ZIPfile
TAR Ball
GitHub

一旦你有代码,通过导入项目的根目录在Android Studio中打开它。你应该看到四个模块,第一个是blocklydemo。构建并运行blocklydemo以验证您的安装。
一旦构建,您会发现以下库文件

  1. blockly-android/blocklylib-core/build/outputs/aar/blocklylib-core-release.aar
  2. blockly-android/blocklylib-core/build/outputs/aar/blocklylib-core-debug.aar
  3. blockly-android/blocklylib-vertical/build/outputs/aar/blocklylib-vertical-release.aar
  4. blockly-android/blocklylib-vertical/build/outputs/aar/blocklylib-vertical-debug.aar

core文件包括模型和控制器类,以及视图的基类。vertical文件包括垂直堆叠块视图,由VerticalBlockViewFactory和相关的视图类定义。您将在项目中至少包含一个。

创建项目和Activity


如果您还没有应用程序项目,请使用“空活动”模板创建一个。Blockly需要16或更高的minSdkVersion。
如果使用现有应用程序,请向项目中添加“"Empty Activity”。

在任一情况下,您不需要生成带有活动的布局文件。您的块式活动最初将使用Blockly库提供的布局。

AndroidManifest.xml文件的新<Activity>中,将windowSoftInputMode设置如下:

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

windowSoftInputMode确保键盘在关闭位置启动,即使有键盘输入字段。它还将确保工作区在键盘(或其他IME)打开时显示此类字段。

在应用程序AppTheme中,在res / values / styles.xml中找到,将父主题设置为BlocklyVerticalTheme

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

此父样式配置块和字段的多个默认值。您可以在the style's definition中找到更多详细信息。

Configure project dependencies


在应用程序项目中,打开File | Project Structure....确保应用程序模块包含库依赖关系...

  • com.android.support:support-v4
  • com.android.support:appcompat-v7
  • com.android.support:recyclerview-v7
    用项目结构对话框中的“+”按钮将模块添加到项目中。选择“导入.JAR / .AAR软件包”模块模板,并从blockly-android项目目录中选择blocklylib-debug.aar或blocklylib-release.aar。然后,在应用程序模块依赖项中,将新模块添加为模块依赖项。

    导入这些.aar文件将它们复制到以下位置的项目目录中:
  • MyBlocklyApp/blocklylib-core-debug/blocklylib-core-debug.aar
  • MyBlocklyApp/blocklylib-core-release/blocklylib-core-release.aar
  • MyBlocklyApp/blocklylib-vertical-debug/blocklylib-vertical-debug.aar
  • MyBlocklyApp/blocklylib-vertical-release/blocklylib-vertical-release.aar

要更新项目中的Blockly库,只需将这些位置的副本替换为较新版本即可。

你可以添加调试和发布版本.aar文件,如果你想只有你的应用程序的调试生成完全调试信息。如果这样做,请确保应用程序模块依赖关系中的范围分别是“Debug compile”和“Release compile”

实现活动基类

***开发Android Blockly活动的最简单的方法是继承AbstractBlocklyActivity.我们强烈建议您将其用于您的第一个Blockly应用程序。该类有几个抽象方法,你需要重写,详细如下。下面的方法实现了SimpleActivity中的方法实现,您可以使用它作为参考

getToolboxContentsXmlPath()

getBlockDefinitionsJsonPaths()将assets /目录中的路径返回到块定义.json文件.

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

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

@Override protected List < String > getBlockDefinitionsJsonPaths() {
    return Arrays.asList(
      "default/list_blocks.json", 
      "default/logic_blocks.json", 
      "default/loop_blocks.json",
      "default/math_blocks.json", 
      "default/text_blocks.json", 
      "default/variable_blocks.json", 
      "default/colour_blocks.json"
  );
}

注意:有关创建新块的详细信息,请参阅Add Custom Blocks

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;
}

注意:详细了解使用Use Custom Generators中的生成器。

getCodeGenerationCallback()

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

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

@Override protected CodeGenerationRequest.CodeGeneratorCallback getCodeGenerationCallback() {
    // Uses the same callback for every generation call.
    return mCodeGeneratorCallback;
}


onInitBlankWorkspace()

虽然不是一个抽象的方法,onInitBlankWorkspace()是目前需要定义可用的变量,如果你的应用程序包括default / variable_blocks.json。可变支持目前正在开发中。

@Override protected void onInitBlankWorkspace() {
    // Initialize available variable names.
    getController().addVariable("item");
}

下一步

在这一点上,应用程序应该编译和运行类似于SimpleActivity
。从这里,发展可以在几个不同的方向前进。您可以...

  1. Customize the activity layout,为应用程序的导航和/或可视化留出空间。
  2. 在新块.json文件中定义和添加自定义块。Define and add custom blocks
  3. 自定义工具箱类别和块Customize the toolbox categories and blocks
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,028评论 25 707
  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,129评论 8 72
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,421评论 2 45
  • 有没有一瞬间,你需要用你所有的理智保持你的崩溃,用你所有的眼泪保持平静,用你身上所有的力气保持平稳的步伐。 8月5...
    悠浅说阅读 438评论 2 0
  • 因为从心底害怕自己不值得被爱,我们独来独往。然而就是因为独来独往,才让我们以为自己不值得被爱。有一天,不知道是什么...
    茯苓30阅读 221评论 0 1