Hello B4A: 使用Visual Basic语法开发原生Android应用






4.35/5 (9投票s)
使用 Basic4Android 开发您的第一个 Android 原生应用
引言
感谢您对我的文章感兴趣。您可以想象我发现这个工具时的敬畏之情。所以我可以用我的 Visual Basic 经验来开发 Android 应用!!!我之前已经走上了学习Java并创建XML文件的道路,但我发现这个过程有时至少可以说是有点乏味的。我想这只是对未知的恐惧。我想要一条更简单的出路。我想要一条捷径。我当时正赶一个最后期限,一个我自己设定的最后期限。最终的结果是一个名为 Bible.Show 的免费应用,可在 Android Play Store 中下载。您可以在此处查看。
今天我将向您展示如何创建和开发一个原生 Android 应用,您可以用自己的图标、自己的应用名称将其安装在您的设备上,无需 xml 和 java,只需纯粹的 visual basic 语法。
几天前,我在这里发布了一篇关于如何使用 visual basic 语法开发 java 应用的文章。请先阅读那篇文章,因为这里的方法完全相同。
第 1 步:让我们设置开发环境
您将使用的 IDE(集成开发环境)是来自 Anywhere Software 的 B4A (Basic4Android)。在撰写本文时,该软件仅在运行 Windows 的计算机上工作。让我们开始吧。
1.1 下载并安装 Java JDK。接受许可协议并选择适当版本的 JDK,无论是 x86 还是 Windows 64 版本。
1.2 下载并安装 Android SDK。Android SDK 通常在带有空格的路径(如“Program Files”)下工作不佳,因此请将其安装在例如“c:\android-sdk”下。选择安装 API 23 或 Android 6.0、SDK Tools、platform tools、google usb driver、android support repository、Google repository 至少这些。
图 1:Android SDK Manager
1.3 下载并安装 B4A 试用版。这是该 IDE 的 30 天试用版。对于本次练习以及您在此期间创建的其他应用来说,这已经足够了。
图 2:运行 B4A
- 在我们的 C 盘上创建一个文件夹,例如命名为b4A。在该文件夹内创建两个子文件夹,一个叫共享另一个叫库.
- 所以您将会有 c:\b4a、c:\b4a\Shared 和 c:\b4a\Libraries。
- 启动 B4A,转到工具 > 配置路径并设置您的路径。
图 3:B4A 配置路径
- javac.exe- 您需要设置来自您安装的 Java JDK 文件夹的 javac.exe。
- android.jar- 这将位于您的 Android SDK 安装路径下,在本例中我们使用了 c:\android-sdk
- 附加库- 将此指向 c:\b4a\libraries(根据示例)或您为附加库选择的任何文件夹。将附加库想象成 DLL(Visual Basic 术语中的动态链接库)。Java 中的库是.jar文件及其 xml 文档。
- 共享模块- 将此指向 c:\b4a\shared(根据示例)或您选择为共享文件夹创建的任何文件夹。将模块想象成 Visual Basic 中的 .bas 文件,这里它们也有.bas扩展名,其代码可以在您应用的任何地方访问。
1.4. 下载并安装 Droid4X 模拟器(可选)。我发现这个模拟器速度快且易于使用。您可以使用模拟器来测试您的应用,然后才能将它们部署到您的设备甚至 Android Play Store。您也可以尝试 Genymotion。如果您决定使用 Genymotion,可以查看我的文章此处了解如何为您的环境准备它。在 Droid4X 模拟器中,您可以拖放您的 apk 来安装它们。
图 4:Droid4X 模拟器
1.5 让您的 Android 设备为开发做好准备
为了让您的 Android 设备能够用于测试和调试您的应用,您需要在其中启用 USB 调试。从 Android 4.2 开始,开发菜单是隐藏的。为了显示它,您应遵循以下说明
- 选择 设置 - 关于手机
- 找到版本号条目并点击它 7 次。
您也可以参阅这篇文章了解如何启用 USB 调试。您还必须启用“从未知来源安装”。这是因为您将开发的应用将是“未知的”,还不是来自 Google Android Store。我发现一个名为 Syncios 的应用对于从我的设备截屏以及确认与我电脑的 USB 连接是否正常非常友好。
图 5:设备通过 USB 连接到免费的 Syncios 应用
1.6 在您的 Android 设备上安装 B4A Bridge (可选)
图 6:Google Play Store 上的 B4A Bridge
B4A Bridge 用于将您的 Android 设备连接到您的开发环境。它还允许人们在设计模式下查看他们的应用的外观,因为它还安装了一个 B4A 设计器。这是可选的,因为它不会妨碍任何人开发他们的应用。这个桥接器在无线网络上工作,因此您的设备和计算机应在同一个网络上。
要将您的设备与 B4A Bridge 连接,请在 B4A Bridge 应用上启动无线,将提供一个 IP 地址,记下这个地址。在您计算机上的 B4A IDE 中,转到“工具”>“B4A Bridge”>“连接”>“新 IP”并输入 B4A Bridge 提供的 IP。
图 7:设备上的 B4A Bridge
如前所述,B4A Bridge 是一个可选步骤,因为您可以直接将 Android 设备连接到计算机进行应用开发。总之,为了让您的 IDE 为 Android 应用开发做好准备,应采取以下关键步骤。
- 安装 Java SDK
- 安装 Android SDK
- 安装 B4A 试用版
- 设置 B4A 路径
- 在您的 Android 设备上启用 USB 调试
如果您已完成这些步骤,恭喜您,您已准备好开发您的第一个 Android 应用。
第 2 步:为您的 Android 应用编写代码
在这一步中,我们将看看每次在 B4A 开发环境中创建新项目时所生成的代码。
在 IDE 中按照以下说明操作。
- 点击 文件 > 新建,代码区域将更新为新的项目结构
- 点击 文件 > 保存,您之前创建了一个名为 c:\b4a 的文件夹,转到该文件夹
- 点击“新建文件夹”并输入 HelloB4A,在 c:\b4a 文件夹内创建一个新文件夹。这意味着您现在有了 c:\b4a\HelloB4A
- 在“文件名”中输入 HelloB4A,然后点击保存。
您的项目现在已经准备好了。让我们看一下下图 8 所示的项目结构。
图 8:B4A HelloB4A 项目结构
一个名为HelloB4A.b4a的新项目文件已被创建。在 IDE 上,这包含了位于Main模块中的所有代码。对于本次练习,我们将不看 Starter 模块。让我来解释一下这个结构
- 文件- 这将存放您应用要使用的任何文件。这些可以是文本文件、您的应用图标等。
- 对象- 这包含了您应用的二进制文件和 Java 生成的文件。您的 apk 在编译后会在Release模式下找到。
您将创建的所有项目都将遵循这种方式。现在,请看代码。
#Region Project Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
此代码由一个区域标识符表示。这里的区域是项目属性。您可以通过点击其开头的加号或负面来折叠和展开一个区域。
- ApplicationLabel- 这将是您应用的名称。例如,您可以将其更改为 HelloB4A。
- VersionCode - 这是您应用的版本,如 1, 100, 200 等
- VersionName - 这是您应用的版本名称,例如,版本代码 100 可能意味着 1.0.0。
- SupportedOrientations - 您的应用支持的方向,例如横向、纵向等。您可以在此处指定两者,用逗号分隔。如果您指定了纵向,您的应用将只在该模式下显示,横向也是如此。
- CanInstallToExternalStorage - 通常这个是 false。当设置为 True 时,意味着您的应用可以安装到外部 SD 卡,甚至可以移动到外部存储。
我用颜色标记了 ApplicationLabel,因为它是这里用来标识您应用名称的主要属性。这个名称将显示在您设备的启动器/仪表板上。您还可以指定您的应用在 Play 商店中将被识别的唯一名称。为此……
转到项目 > 构建配置,将会出现图 9
图 9:构建配置
更改包为com.YourName.HelloB4A并将 YourName 替换为您的实际姓名或公司名称。点击确定。
我喜欢这样理解这些名称
- com - 它是一个商业应用
- YourName - 您的公司名称。您的公司或您自己可以有很多应用
- HelloB4A - 这是您自己/公司开发的这个应用的名称。
这是如图 10 所示的更新后的构建配置。
图 10:更新后的构建配置
到目前为止,您已经通过构建配置为您的应用指定了在 Play 商店中的唯一名称,也指定了在您仪表板上显示的应用名称,现在让我们为您的应用设置一个图标。要为您的应用设置一个会显示在您设备上的图标,您可以使用 png、jpeg 格式,但它应该有合适的尺寸。图标尽量保持 64px X 64px。我发现任何更大的图标都会导致您的应用崩溃。您也可以尝试 80px X 80px,即图标的宽度和高度。
要设置图标,请转到项目 > 选择图标。从您保存图标的文件夹中选择它。请记住,您的图标尺寸要合适。就这样。现在您已经准备好完成代码了。Main 中的代码是让您的应用工作的基本代码。
#Region Project Attributes
#ApplicationLabel: HelloB4A
#VersionCode: 100
#VersionName: 1.0.0
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#End Region
以上是本示例更新后的项目属性。
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
在 B4A 中,每个屏幕/表单就像 Android 编程一样,被称为一个活动 (Activity)。您可以使用一个名为StartActivity(otherActivityName) 的方法从一个活动移动到另一个活动。对于本次练习,我们将不使用多个屏幕。
- FullScreen : False- 这里我们表示屏幕/表单不应全屏。全屏会占据设备的整个区域,包括显示时间、电池电量等的区域。将其设置为 False 意味着屏幕的顶部区域应该出现。
- IncludeTitle : True- 这里我们表示屏幕应该有一个标题区域。您可以在Activity_Create方法的新参数。
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub
内部将屏幕标题设置为“HelloB4A”。Process_Globals 方法是您也可以定义变量的地方。这与 visual basic 语法类似,例如
Dim strA As String
Dim boolX As Boolean
Dim intY As Int
Dim dblZ As Double
Dim strArray() As String
Dim m As Map
Dim l As List
Dim lstView As ListView
现在不用担心 Map、List、ListView 变量。我只是用它来做演示。您也可以将 Dim 改为Private或Public。
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
End Sub
正如注释中所示,在 Sub Globals 中声明的任何变量都将是 Main 模块的私有变量。现在让我们看看屏幕的入口点。在 VB 中,这就像在frm.Show事件中运行的代码。
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
'Activity.LoadLayout("Layout1")
Msgbox("Welcome to B4A!", "")
End Sub
在我之前的文章中,我解释了 LoadLayout 的作用,我们稍后会在这里讨论它。在这个特定的情况下,当屏幕显示在您的设备上时,我们希望显示一个带有欢迎来到 B4A!的消息框。好的,让我们继续。
Sub Activity_Resume
'runs when your app comes out of pause /background state
End Sub
OnActivity_Resume,您可以放入任何希望在应用从睡眠模式恢复时运行的代码。睡眠模式是指您的应用进入后台。例如,您可以在此方法中恢复已保存的屏幕尺寸。
Sub Activity_Pause (UserClosed As Boolean)
'runs when your app goes into sleep / background / pause state
End Sub
OnActivity_Pause,您可以放入任何希望在应用进入睡眠模式时运行的代码。这可以是与屏幕设置相关的代码,例如您希望保存并在Activity_Resume.
中恢复的设置。来吧,在 IDE 中点击“运行”,在您已连接到电脑且开启了USB 调试, 和“允许安装未知来源应用”的 Android 设备上运行您的应用。
图 11:运行 HelloB4A 应用
编译过程将如下图 12 所示运行,您的应用将被安装到您的设备上。
图 12:编译过程
编译过程会从您的项目中生成一个资源文件,将您的代码转换为 Java,然后生成供您分发的 APK 文件。如果您再次查看您的项目文件夹,在 objects 文件夹内,您会发现它已更新,如下图 13 所示。
图 13:项目 Objects 文件夹已更新
在 ApplicationLabelName 中不应使用点或其他任何特殊字符,否则会导致 apk 名称为result.apk。APK 文件是您分发或上传到 Android 商店的唯一文件,没有其他文件。图 14 是应该出现在您设备上的内容。如果您在同一 Wifi 网络下运行 Droid4X,编译时您会收到一个提示,要求选择安装应用的设备。
图 14:HelloB4A 应用在设备上运行。
在您的设备上点击“确定”,然后点击返回按钮,这应该会将您的应用置于后台。在您的设备仪表板上,您应该会看到您的应用,在我的示例中,它在一个黄色的矩形框里。
图 15:设备仪表板上的 HelloB4A
现在,如果您已经完成了这一部分,那么您做得非常好,并且成功地
- 正确设置了您的开发环境
- 为开发目的设置了您的设备
- 开发了您的第一个原生 Android 应用,为它起了个唯一的名字并将其安装在您的设备上。
恭喜!!!
创建屏幕
通过上面的介绍,我已演示了如何使用 Visual Basic 语法开发原生 Android 应用。这是一个简单的例子,只是为了让大家入门。在接下来的部分,我们将创建一个屏幕,让用户输入内容,一个按钮来处理输入等。我之前的文章向您介绍了使用 B4J (Basic4Java) 通过 Visual Basic 语法进行 Java 编程。本文则深入探讨 B4A (Basic4Android)。
您可能已经注意到,B4A 的 IDE 与 B4J 的 IDE 看起来很相似,包括代码区域和其他功能。这里我们也将使用一个设计师,并将其与LoadLayout连接,将其事件与生成成员等等。
连接。在选中 Main 模块的情况下,从 IDE 菜单中点击 Designer,应出现图 16。
图 16:B4A 布局设计器
B4a 的内置控件有
- AutoCompleteEditText - 具有类似组合框功能的文本框
- Button - 点击一个按钮
- CheckBox - 一个简单的复选框
- EditText - 输入内容
- HorizontalScrollView - 左右滑动的控件
- ImageView - 显示图像
- Label - 显示文本
- ListView - 在可滚动的视口中列出项目
- Panel - 在面板内承载其他控件
- ProgressBar - 显示事件的进度
- RadioButton - 选项按钮
- ScrollView - 上下滑动的控件
- SeekBar - 滑块控件
- Spinner - 组合框
- TabHost - 承载其他控件的选项卡
- ToggleButton - 带有开/关的开关
- WebView - 显示 HTML 内容
- CustomViews - 这些是您可以使用类创建或由其他用户创建的控件。
让我们为用户创建一个简单的表单来输入文本。它应该看起来像下面的图 17。
图 17:frmSpeak 布局
要做到这一点,请转到
1. 添加视图 > 标签。将控件拖动到表单上显示的位置。将属性更改为名称:lblName, 水平锚点:Both, 文本:Text2Speech。要设置锚点,首先选择标签并拖动控件的句柄使其位于屏幕边缘,然后更改锚点。您需要按此顺序操作,因为锚点是保存的。这很重要。先放置控件,然后锚定它们。
2. 添加视图 > EditText。将控件拖动到表单上显示的位置。将属性更改为名称:txtWords, 水平锚点:Both, 垂直对齐:Top, 保持输入类型:Text,您也可以将输入类型设为密码、数字等,提示:Words to Speak 和 换行:勾选。
3. 添加视图 > 按钮。将控件拖动到表单上显示的位置。将属性更改为名称:cmdSpeak, 水平锚点:Both, 垂直锚点:Bottom, 文本:SPEAK
锚点有什么作用? 锚点确保您的控件根据您的指定进行拉伸或压缩。当 HorizontalAnchor 为 Both 时,意味着控件应该向左和向右拉伸以适应您屏幕的区域,无论大小。当 VerticalAnchor 为 Bottom 时,意味着无论设备大小如何,控件都应移动到屏幕底部。对于txtWords控件,我们希望它左右拉伸,并向下伸展到cmdSpeak按钮的正上方。
4. 在设计器中点击 文件 > 保存 来保存您的布局,我给它起了一个名字叫frmSpeak.
到目前为止,我们已经创建了一个带有标签、输入文本和按钮的屏幕。我们希望应用能够对在 txtWords 控件中输入的任何内容进行文本到语音的朗读。在 txtWords 上会向用户提供一个提示。
将布局/屏幕控件链接到源代码
要将布局控件链接到代码,我们需要先在设计器上生成成员。我们想要访问txtWords的内容并捕获cmdSpeak Click事件。在图 18 中,可通过 工具 > 生成成员 访问,勾选cmdSpeak及其单击事件,同时勾选lblNote和和 txtWords。
图 18:frmSpeak - 生成成员
点击“生成成员”按钮。这会将控件引用添加到您 Main 中的代码区域。在生成成员时,您应该小心,要先确保代码模块是成员将要生成到的那个模块。先打开模块,然后生成成员。关闭设计器,现在回到代码中,注意变化。
Sub Globals 现已更改为
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Private cmdSpeak As Button
Private txtWords As EditText
Private lblNote As Label
End Sub
此外,还添加了一个新方法
Sub cmdSpeak_Click
End Sub
要显示您的新屏幕,请转到 Activity_Create 并将其更改为
Sub Activity_Create(FirstTime As Boolean)
' show the frmSpeak screen when the app starts
Activity.LoadLayout("frmSpeak")
'change the screen title to be Text2Speech
Activity.Title = "Text2Speech"
End Sub
如果您现在运行该应用,在您的设备上安装后,应该会显示如下图 19 所示的内容。
图 19:Text2Speech 屏幕显示
将 Main 中的代码更新成这样……
Sub Activity_Create(FirstTime As Boolean)
' show the frmSpeak screen when the app starts
Activity.LoadLayout("frmSpeak")
'change the screen title to be Text2Speech
Activity.Title = "Text2Speech"
' change the text for the label to be Status...
lblNote.Text = "Status..."
End Sub
以及 cmdSpeak_Click
Sub cmdSpeak_Click
' display the contents of txtWords in debug log
Log(txtWords.Text)
' if the button text is speak, change its text to stop and the note to be Speaking
' if the button text is stop, change it to speak
If cmdSpeak.Text = "SPEAK" Then
lblNote.Text = "Speaking..."
cmdSpeak.Text = "STOP"
Else
lblNote.Text = "Stopped Speaking..."
cmdSpeak.Text = "SPEAK"
End If
End Sub
再次运行应用,并点击“Speak”按钮,它将切换标签和按钮的内容。通过这个,我刚刚向您展示了一个简单的 If Then Else 语句的实际应用。它的作用是,如果按钮文本是 SPEAK,就把它改成 STOP;如果是 STOP,就把它改成 SPEAK。同时,也相应地更改了标签的标题。
恭喜,您刚刚完成了您的第二个带有屏幕、按钮、标签等的 Android 应用。正如您可能已经猜到的,这个例子是关于文本转语音(Text2Speech)的。到目前为止,我们还没有添加任何类似的功能。让我们让我们的应用能够朗读我们在 txtWords 中输入的文本。为了做到这一点,我们需要一个用于文本转语音的库。
添加库(VB 中称为 DLL)
在 IDE 菜单中,选择窗口 > 重置,然后在右下角的导航栏中选择库。从列表中选择 TTS。如果您的列表中没有 TTS,您可以从附件中获取它并将其保存在您的 c:\b4a\Shared 文件夹中。如果您将其复制到那里,在库列表中,右键单击它并选择刷新,然后再次选择它以加载到您的项目中。
图 20:加载到项目中的库
加载库后,将您的代码更改为如下所示。
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim TTS1 As TTS
End Sub
我们声明了一个名为 TTS1 的 TTS 对象作为进程全局对象。这引用了刚刚加载的 TTS 库。
Sub Activity_Create(FirstTime As Boolean)
' show the frmSpeak screen when the app starts
Activity.LoadLayout("frmSpeak")
'change the screen title to be Text2Speech
Activity.Title = "Text2Speech"
' change the text for the label to be Status...
lblNote.Text = "Status..."
txtWords.Text = "This is my first Native Android App developed with Basic4Android!"
End Sub
我们正在将 txtWords 的内容更改为如上所述。请记住,在该 EditText 中,您也可以输入您的文本并按下 cmdSpeak 按钮。让我们添加以下代码...
Sub TTS1_Ready (Success As Boolean)
If Success Then
'enable all views
For i = 0 To Activity.NumberOfViews - 1
Activity.GetView(i).Enabled = True
Next
cmdSpeak_Click 'play first sentence
Else
Msgbox("Error initializing TTS engine.", "")
End If
End Sub
当文本转语音引擎准备就绪时,会触发 TTS 对象的 Ready 事件。由于我们将 TTS 定义为 TTS1,我们将该事件链接到该对象。这个例程的作用是通过将其 Enabled 状态设置为 True 来启用窗体上的所有控件。例如,在设计器中,您可以将 cmdSpeak 按钮的 Enabled 属性更改为 False。在所有控件都启用后,cmdSpeak_Click事件被触发。
Sub Activity_Resume
If TTS1.IsInitialized = False Then
TTS1.Initialize("TTS1")
End If
End Sub
在 Sub Activity_Resume 中,我们检查 TTS1 对象是否已初始化,如果未初始化,我们则初始化它。然后,当应用进入后台时,我们释放 TTS1 对象。
Sub Activity_Pause (UserClosed As Boolean)
TTS1.Release
End Sub
Sub cmdSpeak_Click
' display the contents of txtWords in debug log
If txtWords.Text.Length > 0 Then
TTS1.Speak(txtWords.Text, True)
txtWords.SelectAll
End If
' if the button text is speak, change its text to stop and the note to be Speaking
' if the button text is stop, change it to speak
' If cmdSpeak.Text = "SPEAK" Then
' lblNote.Text = "Speaking..."
' cmdSpeak.Text = "STOP"
' Else
' lblNote.Text = "Stopped Speaking..."
' cmdSpeak.Text = "SPEAK"
' End If
End Sub
正如您可能已经注意到的,库是其他为与 B4A 框架配合工作而开发的 .jar 和 .xml 文件。有各种各样的库可用,一些是由其他 B4A 程序员编写的,另一些则来自框架本身。
继续,运行您的应用,让它安装在您的设备上并试玩一下。目前我们就到这里。
您也可以在调试模式下运行您的应用,以便检查错误。在发布模式下,B4A 会为您创建 apk 文件,您可以在 Objects 文件夹中找到它。您最终的应用应该看起来像图 21 这样。
图 21:最终应用
关注点
本文首先介绍了如何为 B4A 设置开发环境,然后运行您的第一个 Android 应用,编写一些代码使用if 语句使您的应用以不同方式运行,然后添加一个库,这是一个高级功能。它还探讨了您屏幕的Activity_Pause和Activity_Resume事件。为库添加了就绪库的TTS事件。它还涉及了对象的初始化。我试图涉及一些简单的基本功能,以及更复杂的功能,以展示这个框架的强大功能。
B4A 的试用版不支持库,要使用库您需要付费版本,并且您的 apk 大小会受到限制。您可以访问 B4X 网站这里获取付费版本。
虽然语法几乎与 Visual Basic 相同,但有一些新的方法、常量和其他定义需要一路学习。对于任何有兴趣深入 B4A 的人来说,这无论如何都是一个非常有趣的兔子洞。另一个好处是,这个框架有一个支持论坛,可以找到任何相关问题的答案。
当您运行最终的应用时,TTS 引擎可能需要一两秒钟来初始化,请稍加耐心等待。
享受。
PS