android - 使用 TStyleBook 时的旧/暗对话框

标签 android delphi firemonkey delphi-10.1-berlin

此问题与以下问题高度相关:Why are all the dialogs are using the "old" Android 2.x style?

我正在使用 Delphi Berlin (10.1),这个问题已经解决了:

enter image description here

但是,一旦将 TStyleBook 拖放到表单并分配给它(例如,通过右键单击一个组件然后“编辑自定义样式”),对话框(所有对话框)都会再次变为深色样式:

enter image description here

自动创建的“trimmed”样式仍然是“light”版本(“AndroidL Light”)。是的,我检查了 FMX.Helpers.Android.pas 中的函数“GetNativeTheme()”分配了 Result,我什至复制了文件并将其添加到项目中。从 Form1.StyleBook 中删除分配,再次显示 native 样式的对话框。

如何在继续使用 TStyleBook 的同时解决这个问题?

最佳答案

我发现了问题:函数 GetNativeTheme() 正在使用 TStyleManager.FindStyleDescriptor() 在分配的样式中搜索 TStyleDescription 对象条目, 查看字符串“[LIGHTSTYLE]”或“[DARKSTYLE]”之一是否用于目标平台。在一个完整的样式文件中,这个对象条目通常存在,但是当开始在 IDE 中编辑一个组件的自定义样式时,一个 TStyleBook 组件只创建一个小样式。 IDE里面是看不到的,但是这个小style里面没有TStyleDescription对象入口,所以是看不到dark/light主题的。默认情况下,GetThemeFromDescriptor() 返回 0,这似乎对应于深色/旧样式。

我解决了这个问题,方法是双击 TStyleBook 组件,将样式保存到文件 (*.style),在文本编辑器中打开该文件,然后简单地手动添加 TStyleDescription 对象条目。保存并加载回 IDE。现在所有对话框都使用正确的灯光样式主题。

Add the text marked with the red rectangle to the styles file

这里再次作为文本:

  object TStyleDescription
    StyleName = 'Description'
    Author = 'Embarcadero Technologies Inc.'
    AuthorURL = 'www.embarcadero.com'
    PlatformTarget = '[ANDROID][ANDROIDL][LIGHTSTYLE][DEFINEFONTSTYLES]'
    MobilePlatform = True
    Title = 'AndroidL Light'
    Version = '1.0'
  end

关于android - 使用 TStyleBook 时的旧/暗对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610374/

相关文章:

delphi - 如何在多设备应用程序中将显示在 TGlyph 上的图像拉伸(stretch)到 TGlyph 的大小?

android - 等效于 ios 的 spongycaSTLe 加密

android - 改造日志拦截器异常

java - 在relativelayout中使用layout_toLeftOf布局的按钮不显示

delphi - "the application failed to initialize properly"是什么意思?

delphi - 动态调整窗体大小以适应 Delphi 中框架的大小

android - 如何在 firemonkey Delphi XE 8 的 Android 通知栏(如 Facebook 等)中使用外部大图像?

delphi - 如何使选项卡不可见,但使该选项卡不可见? -德尔福FireMonkey

android - Google-play-services_lib 无法解析目标“android-9”

.net - 在 Delphi 程序中托管 .NET 运行时