android - 为什么 Android FireMonkey 应用程序中的控件不能跨越多列或多行?

标签 android delphi firemonkey delphi-10.1-berlin

我有一个带有 GridPanelLayout 的 FireMonkey 应用程序,与客户端对齐。它有 6 列和 16 行。控件包括字形、编辑和按钮。 TEdit 跨越多列,TButton 跨越多列和行。目前,控件全部与客户端对齐。

当我在 Windows 上编译和运行时,一切看起来和行为都符合预期。然而,在 Android 设备上(我尝试了两种,Android 6.0.1 和 Amazon FireOS),没有一个控件跨越超过一列或一行。它们每个都只有一个细胞那么大。 TEdit 不跨越 6 列,而是仅跨越 1 列; TButton 不是跨越 2 列和 2 行,而是跨越 1 列和 1 行。

为什么控件在 Android 上不会跨越多列或多行?

最佳答案

当框架/表单被子类化或框架被放置时,VCL 和 FireMonkey 都无法正确存储 TGridPanel/TGridPanelLayoutControlCollection在另一个框架/表单上。

此错误适用于 VCL 和 FMX。早在 2011 年就已向旧 QC 报告过该问题,但从未得到修复(例如: #92298#123225 )。

示例:将一个带有 TButtonTGridPanelLayout 拖放到 TFrame 上:

object GridPanelLayout1: TGridPanelLayout
    (...)   
    ControlCollection = <
      item
        Column = 0
        ColumnSpan = 2
        Control = Button1
        Row = 0
        RowSpan = 2
      end>
    object Button1: TButton
      Align = Client
      Size.Width = 421.000000000000000000
      Size.Height = 257.000000000000000000
      Size.PlatformDefault = False
      TabOrder = 0
      Text = 'Button1'
    end
end 

当您稍后对框架进行子类化时,IDE 往往会为其从基类继承的组件存储大量冗余属性。通常,在第一次按 F9 后,ColumnSpanRowSpan 属性会无缘无故地被删除。在子类上,它看起来像这样:

inherited GridPanelLayout1: TGridPanelLayout
    (...)
    ControlCollection = <
        item
            Column = 0
            Control = Button1
            Row = 0
        end>
    inherited Button1: TButton
        Size.Width = 210.500000000000000000
        Size.Height = 128.500000000000000000
    end
end

请注意 Size 属性的变化情况。此外,ControlCollection 项被重新定义,但 ColumnSpanRowSpan 属性完全丢失。这就是原因。

此错误适用于您,因为在 FMX 中,特定平台的专用 View 是作为 master view 的子类实现的。

版本控制系统有助于检测冗余属性何时潜入 DFM 文件中。在上面的示例中,当您的子类不更改继承的 GridPanelLayout1 block 时,完全删除它是合法的。此外,我建议您在不打开表单设计器窗口的情况下构建项目,因为它通常会损坏您的 DFM 文件并在每次机会时重新添加冗余属性。

关于android - 为什么 Android FireMonkey 应用程序中的控件不能跨越多列或多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48758081/

相关文章:

android - cordova:从url下载到android下载文件夹

android - 搜索栏长度操作

ios - Delphi XE4 FireMonkey TMemo 透明吗? (iOS)

mysql - 德尔福:MySql 与 Indy10

ios - Delphi XE4 iOS 应用程序未通过代码签名验证

android - 错误 : JSR/RET are not supported with computeFrames option

android - android添加依赖报错

arrays - 从函数返回动态数组

delphi - 我正在寻找Delphi Firemonkey的拖放示例

android - 使用 Delphi 以编程方式检查 SD 卡是否可用