0

我想我首先要说我对 B4A 和一般编程非常陌生。我有一些非常基本的 java 和 html exp。但就是这样。我没有任何 basic4ppc 或任何 IDE 经验。已经使用 B4A 几天了,无法克服困难。这是我的菜鸟问题:

  1. 有很多活动(20-30+)会减慢应用程序的速度吗?有很多活动有缺点吗?
  2. 我不知道如何在设计器中滚动。我正在尝试制作一个在 1 列中有 25 个按钮的屏幕。但是我无法向下滚动以在下面添加更多按钮。我能够以编程方式并以我想要的方式添加按钮(使用 for 循环),但是像这样在运行时创建视图是否正常?
  3. 您如何确保您的应用在所有设备上看起来都一样?平板电脑?我有一个非常适合模拟器的滚动视图,但是在我的手机(droid x)上,滚动视图的底部没有拉伸到手机的底部。我使用代码:scvScreen1.Initialize(100%y)。这不对吗?
  4. 我有一个电子邮件屏幕,其中包含一个编辑文本和一个发送按钮,以便用户可以从应用程序向我发送问题。但是,发送按钮在“URI =”行上给了我这个错误:“LastException java.lang.NumberFormatException:mailto:”这是代码:
    Sub btnSendEmail_Click
    Dim Uri As String
    Uri="mailto:me@gmail.com?subject =Test Email&body=" + edtHelpEmail.Text
    Dim Intent1 As Intent
    Intent1.Initialize(Intent1.ACTION_VIEW,Uri
    StartActivity(Intent1)
    End Sub
    或者还有其他方法可以打开设备的默认电子邮件程序吗?

  5. 关于最后一个问题,如何将错误消息复制到剪贴板?我选择了IDE右下角的红色错误信息,尝试了ctrl-c,但是没有用。

  6. 在 B4A 中,存储持久数据的好方法是什么?我真正需要存储的只是一些字符串。没有什么花哨。这些字符串将存储在本地。AI 通过使用 TinyDB 让这一切变得简单。
  7. 在使用设计器时,您如何确保您的视图以所有设备为中心?例如,我有一个屏幕,它有几行组成:(标签、编辑文本、标签)。我希望每一行都居中对齐。我是否以编程方式执行此操作?我想我必须将 (label, edittext, label) 的每一行附加到一个面板,然后在面板的代码中心。这个对吗?

这就是我现在得到的全部,但我相信以后会有更多的问题。

4

3 回答 3

1

1) android 的整个想法是小组件,即应用程序一起工作,因此无需担心打开大量活动。内存在 Android 的幕后管理得非常好。

2)当然。这对我来说听起来不错。尽可能多地使用布局设计器,然后再添加动态内容。这一切都是为了在代码大小和活动数量之间取得平衡。

3) 在设计器中有一个名为“发送到 UI Cloud”的选项。这会在多个屏幕尺寸上比较您的应用。您还可以在 Activity_Create 生命周期中扩展您的设计并以编程方式调整应用程序中特定控件的大小

4)你在做什么几乎是正确的。我更正了您的代码:

Sub MailTo(StrAddress As String, StrSubject As String, StrBody As String)
    Dim StrMethod As String = "Sub MailTo(StrAddress As String, StrSubject As String, StrBody As String)"
    Try
        Dim StrUri As String
        StrUri = "mailto:" & StrAddress & "?subject=" & StrSubject & "&body=" & StrBody

        Dim Intent As Intent
        Intent.Initialize(Intent.ACTION_VIEW, StrUri)

        StartActivity(Intent)

    Catch
        If BlnLoudExceptions Then CdException.Show(StrClass, StrMethod, LastException)
    End Try
End Sub

我倾向于为这些功能使用一个名为 CdIntent.bas 的代码模块,因为它既可以保持项目的组织性,又可以更轻松地跨项目实现相同的功能。

然后打电话给你会使用

CdIntent.MailTo("me@yes.no", "Subject!", "Body!")

5) 我有一个名为 CdException.bas 的文件

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Show(StrClass As String, StrMethod As String, Ex As Exception)
    LogColor("Exception: " & Ex.Message & " - Class: " & StrClass & " - Method: " & StrMethod, Colors.Magenta)

End Sub

然后按以下方式包装函数:

Sub FunctionName(...Parameters...) as Int
    Dim StrMethod As String = "Sub Sleep(LngMilliseconds As Long)"
    Dim IntResult As Int = 0
    Try
        [code here inc. IntResult = ???]

    Catch
        If BlnLoudExceptions Then CdException.Show(StrClass, StrMethod, LastException)
    End Try
    Return IntResult
End Sub
  • BlnLoudExceptions 是您在 Process_Globals 中声明的全局布尔值,您可以打开关闭的异常日志。
  • StrClass 是您在 Process_Globals 中声明的全局字符串,其中包含类的名称,例如“CdIntent.bas”

然后异常出现在日志屏幕中的洋红色中,以及它们发生的方法名称和类,让您可以了解它们。

6) 我在一个名为 TabletSettings 的 SQLLite 数据库中有一个表,它有两个名为“名称”和“值”的 TEXT 列。它运作良好,让您养成(我认为是)从一开始就始终为您的应用程序提供数据库的好习惯。

7)我会尽快回复你,因为我以前没有这样做过。在那之前,下面的帖子将在 B4A 论坛中为您提供帮助http://www.basic4ppc.com/android/forum/threads/convert-integer-to-dip.18800/

于 2013-10-16T07:32:48.093 回答
0

我同意吉姆的观点,但会尝试回答 1。

我自己是 android 新手,但据我了解,整个活动仅在活动时运行。除非您使用该应用程序不断地做某事,否则一次只能进行一项活动。活动的数量可能比任何事情都更能影响可用的 ram。最后,可能值得先步行而不是跑步,而是尝试一次然后添加多项活动。

于 2011-10-27T11:47:55.917 回答
0
  1. 您可以尝试添加一个 ListView 或 ScrollView ,其中项目是按钮,这似乎是标准的做事方式,否则是选项卡式视图。
于 2011-10-27T11:52:45.667 回答