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

2024-03-04

我有一个带有 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 都无法存储ControlCollection of a TGridPanel / TGridPanelLayout当一个框架/表单被子类化或一个框架放置在另一个框架/表单上时,正确地执行此操作。

此错误适用于 VCL 和 FMX。早在 2011 年就已向旧 QC 报告过该问题,但从未得到修复(示例:#92298 https://web.archive.org/web/20140322052840/http://qc.embarcadero.com/wc/qcmain.aspx?d=92298, #123225 https://web.archive.org/web/20171220121227/http://qc.embarcadero.com/wc/qcmain.aspx?d=123225).

示例:删除一个TGridPanelLayout with a TButton在它的一个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 后,ColumnSpan and RowSpan属性被无缘无故地删除。在子类上,它看起来像这样:

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项目被重新定义,但ColumnSpan and RowSpan属性完全缺失。这就是原因。

这个错误适用于您,因为在 FMX 中,特定平台的专用视图被实现为主视图 http://docwiki.embarcadero.com/RADStudio/en/Using_FireMonkey_Views.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Android FireMonkey 应用程序中的控件不能跨越多列或多行? 的相关文章

随机推荐