Codename One布局样式错乱:theme.res被自动删除重建如何解决?
我之前也碰到过一模一样的糟心事,Codename One的theme.res莫名被覆盖确实挺闹心的,给你几个亲测有效的解决方案:
锁定theme.res文件,防止被自动修改
在NetBeans里找到项目根目录下的theme.res,右键选择「Properties」,在「General」标签页勾选「Read Only」。这样构建脚本就没法删除或改写这个文件了。不过要注意,之后如果需要修改主题,得先取消只读权限,改完保存后再重新勾选锁定。检查并修改构建脚本,禁用自动生成theme.res
打开项目的build.xml文件,搜索有没有类似generate-theme的构建目标——这类任务大概率会自动生成新的theme.res覆盖你的自定义配置。找到后把这个任务用<!-- -->注释掉,或者直接删除。另外,去NetBeans的Codename One插件设置里看看,有没有「构建时自动生成主题」这类选项,直接关掉它。手动确保正确的theme.res被打包进APK
有时候构建系统会从临时目录读取theme.res,而不是你修改的那个。你可以手动把正确的theme.res复制到项目的build/classes或者dist目录下;也可以在build.xml里加一个复制任务,确保每次构建时都会把你自定义的theme.res复制到打包目录,比如:<target name="copy-theme" depends="init"> <copy file="theme.res" todir="${build.classes.dir}"/> </target>然后把这个任务加到主构建目标的依赖里。
清理项目缓存,彻底重置构建状态
先删掉NetBeans项目目录下nbproject/private里的缓存文件,这些缓存有时候会保留旧的主题配置。然后执行NetBeans的「Clean and Build」操作,彻底清理旧的构建产物,再重新构建项目,这样就能确保用的是你最新的theme.res。确认主题编辑器的保存路径
打开Codename One主题编辑器时,一定要确认保存的是项目根目录下的theme.res,而不是编辑器生成的临时文件。有时候编辑器默认保存到临时目录,导致你的修改根本没生效到项目里。
按照这些步骤操作,应该就能解决theme.res被自动重建、样式错乱的问题了。
内容的提问来源于stack exchange,提问作者rainer

