gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 09:29:03 27 4
gpt4 key购买 nike

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

当我在 Windows 上编译和运行时,一切看起来和运行都符合预期。但是,在 Android 设备上(我尝试了两种,Android 6.0.1 和 Amazon FireOS),没有一个控件跨越一列或一行。它们每个都只有一个细胞那么大。 TEdits 不是跨越 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 文件。在上面的示例中,当您的子类不更改它时,完全删除 inherited GridPanelLayout1 block 是合法的。此外,我建议您在不打开窗体设计器窗口的情况下构建您的项目,因为它通常会损坏您的 DFM 文件并在每次机会时重新添加冗余属性。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com