【问题标题】:CSS defined style not always abode in Codename OneCSS 定义的样式并不总是存在于 Codename One 中
【发布时间】:2018-03-18 22:22:41
【问题描述】:

在我的 Codename One 应用程序中,样式是在 css 中定义的。即我基于this great video tutorial 设计的侧边菜单。所以我的风格定义如下:

SideMenuTagLine {
cn1-derive: "SideCommand";
text-align: right;
padding-left: 0mm;
padding-right: 0mm;
padding-top: 1mm;
padding-bottom: 0mm;
margin-right: 3mm;
font-family: "native:ItalicLight"; 
font-size: 3mm; 
}

当我测试以斜体显示的标语时,但随后我在 css 上进一步工作以添加其他样式,突然标语失去了斜体(模拟器和真实设备)。

要让它重新出现,我必须删除 myTheme.css.res 文件。但是,当我再次更改 css 样式(不是 SideMenuTagLine 或 SideCommand)时,标语 Italic 会丢失。也许其他样式也丢失了,但我没有注意到。

这是我第一次生成 res 文件时得到的预览(从不存在的 myTheme.css.res 文件开始)。人们可能会注意到KmLabelProgress 对齐在未选中和选中选项卡之间发生了变化,尽管我没有更改它。 :

然后,如果我更改 css 文件中的任何内容(例如:选择器的颜色),我会得到以下生成的 res 文件。在这种情况下,不会发生上述对齐更改:

请注意:这也是最新 (3.7.3) CN1 插件版本中的行为(与之前的版本一样)。

如何确保应用我在 css 文件中定义的 css 样式?

任何帮助表示赞赏,

2017 年 10 月 9 日编辑: 这是我从命令行使用设计器打开生成的 res 文件时得到的堆栈跟踪的开头:

2017-10-09 10:37:09.388:INFO:oejs.Server:jetty-8.0.y.z-SNAPSHOT
2017-10-09 10:37:09.441:INFO:oejs.AbstractConnector:Started             
SelectChannelConnector@0.0.0.0:9000 STARTING
oct. 09, 2017 10:37:09 AM org.jdesktop.application.LocalStorage getId
AVERTISSEMENT: unspecified resource Application.id using ResourceEditorApp
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager(KeyboardFocusManager.java:216)
at java.awt.KeyboardFocusManager.processCurrentLightweightRequests(KeyboardFocusManager.java:2621)
at java.awt.KeyboardFocusManager.retargetFocusEvent(KeyboardFocusManager.java:2946)
at java.awt.Component.dispatchEventImpl(Component.java:4752)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)

请注意:完整的堆栈跟踪比 SO 上的允许长度长。

【问题讨论】:

  • 您能否缩小导致斜体丢失的特定更改的范围?您能否在设计器中查看生成的 res 文件,或者尝试在运行时使用模拟器样式编辑器操作样式,看看是什么触发了这种情况?
  • 感谢Shai 的支持。删除cn1-derive 指令并没有改变任何东西:当我添加或修改另一种样式(关于填充、边距、字体)时,SideTagLine 斜体会丢失(但不会丢失保持白色的派生颜色)。再次修改SideTagLine 会使斜体再次出现。如果我能找到生成的 res 文件的内容,我会及时通知您。
  • 组件检查器不允许我打开任何主题样式:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at com.codename1.ui.util.EditableResources.getTheme(EditableResources.java:1845) at com.codename1.designer.ResourceEditorApp.main(ResourceEditorApp.java:211)
  • 生成的 res 文件无法在设计器中打开(错误但弹出对话框中没有显示任何内容),但 theme.res 可以。如果我删除生成的 res 文件,则应用所有 css 定义的样式。但是,如果我在某处更改填充,那么所有样式都会丢失(字体颜色除外)。所以看起来css文件中有一个导致问题的指令。
  • 取消选中设计器工具中的文件 -> XML 团队模型选项。那应该解决删除的需要。 CSS 在 res 文件中生成了什么?

标签: css codenameone


【解决方案1】:

正如 Shai 所指出的,这只是与原生字体相关的 CSS 生成。我已经修复了这个错误并发布了一个新的 CSS 插件 (v.1.1.4)。要更新,只需将最新的 cn1css-ant-task.jar 下载到项目的 lib 目录中即可。

https://github.com/shannah/cn1-css/releases/tag/1.1.4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多