使用TStyleBook

时间:2017-12-02 17:08:15

标签: 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

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

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

2 个答案:

答案 0 :(得分:4)

我发现了问题:函数GetNativeTheme()正在为TStyleManager.FindStyleDescriptor()对象条目的指定样式中使用TStyleDescription进行搜索,以查看其中一个字符串“[LIGHTSTYLE]”或“ [DARKSTYLE]“用于目标平台。在完整样式文件中,此对象条目通常存在,但是当开始在IDE中编辑组件的自定义样式时,将使用小样式创建TStyleBook组件。它在IDE内部无法看到,但这种小样式不包含TStyleDescription对象条目,因此无法找到暗/亮主题。默认情况下,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

答案 1 :(得分:0)

除了StanE的答案: 除了向所有自定义样式添加StyleDescription之外,您还可以修改GetThemeFromDescriptor()中的FMX.Helpers.Android函数以返回默认值TJAlertDialog.JavaClass.THEME_HOLO_LIGHT