Codename One iOS应用:Validator.addSubmitButtons修改按钮样式问题
解决Codename One中Validator修改自定义按钮样式的问题
这问题我之前在开发Codename One应用时也碰到过,Validator的addSubmitButtons方法确实会默认给按钮套一套内置样式,直接覆盖你手动设置的边距、尺寸这些属性,哪怕之后重新设置也不生效,主要是因为样式优先级和状态覆盖的问题。给你几个靠谱的解决思路:
1. 用主题UIID替代直接修改组件样式
Codename One的样式体系里,主题定义的UIID优先级更高,而且Validator不会随意覆盖主题里的配置。你可以这么做:
- 打开Codename One的主题编辑器,新建一个自定义UIID(比如命名为
CustomSubmitButton) - 在这个UIID里设置好你需要的所有样式:无边框、背景色
0x9d1710、前景色0x848484、左右边距4等 - 给你的按钮设置这个UIID:
之后再把按钮添加到Validator里,主题样式会保留下来,不会被覆盖。Button signUpButton = new Button("Conferma"); signUpButton.setUIID("CustomSubmitButton"); signUpButton.setCapsText(true);
2. 添加到Validator后针对组件状态样式修改
之前你用getAllStyles()修改的是全局样式,可能被Validator设置的组件特定状态样式覆盖了。试试在调用addSubmitButtons之后,直接修改按钮的当前状态样式,并且强制刷新组件:
// 先创建按钮并设置初始样式 Button signUpButton = new Button(); signUpButton.getAllStyles().setBorder(Border.createEmpty()); signUpButton.getAllStyles().setBgTransparency(255); signUpButton.getAllStyles().setBgColor(0x9d1710); signUpButton.getAllStyles().setFgColor(0x848484); signUpButton.getAllStyles().setMargin(Component.LEFT, 4); signUpButton.getAllStyles().setMargin(Component.RIGHT, 4); signUpButton.setCapsText(true); signUpButton.setText("Conferma"); // 添加到验证器 validator.addSubmitButtons(signUpButton); // 重新设置按钮的样式,这次用getStyle()获取当前状态样式 Style btnStyle = signUpButton.getStyle(); btnStyle.setBorder(Border.createEmpty()); btnStyle.setBgTransparency(255); btnStyle.setBgColor(0x9d1710); btnStyle.setFgColor(0x848484); btnStyle.setMargin(Component.LEFT, 4); btnStyle.setMargin(Component.RIGHT, 4); // 强制组件刷新样式 signUpButton.revalidate();
getStyle()获取的是按钮当前活跃状态的样式对象,修改后调用revalidate()让组件重新渲染,这样就能覆盖Validator设置的样式了。
3. 修改Validator的默认提交按钮样式
如果你的应用里有多个提交按钮,想统一用自定义样式,可以直接修改Validator的默认UIID配置:
- 打开主题编辑器,找到
Validator.SubmitButton这个内置UIID - 修改它的样式属性为你需要的配置,比如边距、背景色等
- 之后所有通过
addSubmitButtons添加的按钮都会自动应用这个样式,不用再逐个设置
补充说明
为什么之前重新设置样式没用?因为addSubmitButtons不仅修改了按钮的默认样式,还可能给按钮的Pressed、Disabled等状态也设置了样式,getAllStyles()修改的全局样式优先级低于组件的状态样式,所以没生效。用主题UIID或者直接修改getStyle()的方式,能确保样式覆盖到所有状态。
内容的提问来源于stack exchange,提问作者A M
相关产品推荐
相关产品推荐

