【问题标题】:What is the purpose of the 'default' platform marker in the list of tstylebook styles?tstylebook 样式列表中“默认”平台标记的目的是什么?
【发布时间】:2020-08-15 10:39:36
【问题描述】:

更新:我从头开始制作了一个新的测试项目,这个项目确实在我的 Windows 和 android 主窗体上的默认平台标记内应用了样式,所以下面看到的行为可能与我的项目的其余部分有关..I将进行更多测试。(我有 1 种样式“背景样式”,矩形画笔填充颜色设置为红色)

更新 2:只要我添加了 1 种特定样式,例如android 平台,不再考虑任何“默认”平台样式。主窗体突然不再红了。

在为我的概念验证多平台应用程序进行良好的样式设计的英勇尝试中,我正在更仔细地研究样式手册。 一般来说,将样式与应用程序逻辑分开当然是非常受欢迎的。虽然我更不确定这个原则的 fmx 实现是否到目前为止是最优的(我迷失在找出我需要更改哪个样式资源的哪个属性以获得我想要的除了简单文本或矩形之外的任何东西.. ..但这可能取决于我。)。 我也明白每个目标平台都有自己的习惯,坚持这些习惯是很好的做法(至少,如果你想成为 hurd 的一部分:-)。但我会说,例如我的主要应用程序颜色是我决定的,并且应该跨平台保持一致。似乎为了实现这一点,我可能需要在所有多个单独的样式--resources-- 上进行更改(在列表中的 190 种样式中的每一种样式中都可能指定填充颜色,并且在位图映射中的所有位图,每个比例和每个源链接名称.. ) 并且,同样,每个目标平台都有这个...结果通常是我坚持开箱即用的“高级”样式:- )
我曾希望“默认”平台标记能够发挥作用,并为所有样式提供此平台,但如果在该平台上确实需要,则仅重复和更改某些特定于平台的样式。文档说:

注意:还有“默认”平台标记。当应用程序找不到与当前平台匹配的样式时,FireMonkey 应用程序会加载默认样式。

但它似乎并没有以这种方式工作。例如在 android 上,这些默认样式(在运行时)总是被忽略并恢复为嵌入式平台特定样式,但在 Windows 中确实使用了这些样式......(在设计时的 IDE 中,相同的默认样式显示为我期望的每个我选择的平台 -- ) 在我的示例中,我只是使用主窗体背景颜色(= backgroundstyle 画笔填充颜色)作为简单的测试设置:更改“背景样式”上的画笔填充颜色
对于默认平台并在 windows / android 上运行)。

那么样式书中默认平台的目的是什么?有什么我不明白的吗?或者它是一个错误?有没有办法通过样式书跨平台使用一组样式? 如果没有,您能否创建和部署一个样式文件并在运行时加载并在所有平台上使用它? (此样式文件中是否应该有平台标记?如果不是“真正”正确的目标平台,样式是否会被忽略...)
结果,我发现自己毕竟在代码中做了很多运行时样式,因为我真的很确定它会是平台一致的,但这并不是我猜的真正目的......

【问题讨论】:

  • 在现实生活中,您是否宁愿从空样式簿开始,只为您使用的每个视觉组件添加样式(使用编辑默认样式,或在右键菜单上编辑自定义样式选项)。管理较少的样式,但您失去了从现有的“真实”样式开始的好处..

标签: delphi styles firemonkey delphi-10.3-rio


【解决方案1】:

似乎当您将样式书属性“UseStyleManager”设置为 true 时,无论平台如何,(第一个)样式确实是 ...used :-) 。 这也意味着当您的样式容器不包含正确的样式资源时,您的组件可能是不可见的! 但是当它们可用时,它们会在所有平台上一致地呈现。

个人偏好可能只有 1 种单一样式(定义),并且在需要时例外。但根据我目前的经验,浏览和使用样式资源列表非常耗时,因此我需要验证的“集合”越少越好。

如果我仍然需要特定平台的不同样式,我需要在运行时覆盖该特定平台上该组件的样式查找名称,当然还要将该特定样式查找名称添加到我的默认样式容器中(只需添加一个新平台到您的样式簿并使用相同的查找名称将不起作用,因为它在此设置中被忽略)。

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2016-04-02
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多