Codename One CSS中Material Icon颜色不随按钮文本变色问题求助
解决Codename One中Material Icon颜色不随按钮CSS样式变化的问题
首先,你遇到的问题是因为FontImage创建的图标默认是独立的Component,它不会自动继承按钮的文本颜色;而且新版CSS支持下,主题编辑器的设置会被CSS覆盖,所以之前通过主题编辑器修改的方式不再生效。下面给你几个可行的解决方案:
方法1:为图标指定专属UIID并在CSS中同步颜色
你可以给图标单独设置一个UIID,然后在CSS中让这个UIID的颜色与按钮保持一致:
Java代码修改:
FontImage icon = FontImage.createMaterial(FontImage.MATERIAL_CHECK, "ButtonTestIcon", 3); Button buttonTest = new Button("Test css"); buttonTest.setUIID("ButtonTest"); buttonTest.setIcon(icon);
CSS代码修改:
ButtonTest { color: red; } ButtonTestIcon { color: red; /* 与按钮文本颜色保持同步 */ }
方法2:利用CSS子选择器让图标继承按钮颜色
按钮中的图标是以Label子组件的形式存在的,你可以用CSS子选择器让它直接继承按钮的颜色,无需单独给图标设置UIID:
CSS代码修改:
ButtonTest { color: red; } /* 让按钮内的所有Label子组件(包括图标)继承按钮的颜色 */ ButtonTest > Label { color: inherit; }
方法3:创建图标时直接绑定按钮的样式
在创建FontImage的时候,直接传入按钮的样式对象,这样图标会自动使用按钮的颜色配置,后续CSS修改按钮颜色时,图标也会同步变化:
Java代码修改:
Button buttonTest = new Button("Test css"); buttonTest.setUIID("ButtonTest"); // 确保按钮样式已加载完成,再创建图标 buttonTest.getStyle().refreshTheme(); FontImage icon = FontImage.createMaterial(FontImage.MATERIAL_CHECK, buttonTest.getStyle(), 3); buttonTest.setIcon(icon);
关于主题编辑器失效的说明
新版Codename One的CSS支持优先级高于主题编辑器的设置,所以启用CSS后,主题编辑器的修改会被CSS覆盖。建议统一使用CSS来管理所有样式,这样能避免样式冲突,也更便于维护。
内容的提问来源于stack exchange,提问作者rainer
相关产品推荐
相关产品推荐

