我只是想在用户按下在CSS中样式化的MultiButton
时向用户提供反馈。尝试在代码名称中的MultiButton上按下样式/选定样式导致堆栈溢出错误
的MultiButton
这样使用:
String newStyleName = "NewText";
Style newStyle = new Label("g", newStyleName).getUnselectedStyle();
String newSubStyleName = "NewSubText";
String newIconStyleName = "NewIcon";
MultiButton nameButton = new MultiButton("Name");
nameButton.setTextLine2("Give a name");
nameButton.setIcon(FontImage.createMaterial(FontImage.MATERIAL_TEXT_FIELDS, newStyle));
nameButton.setIconUIID(newIconStyleName);
nameButton.setUIIDLine1(newStyleName);
nameButton.setUIIDLine2(newSubStyleName);
this.add(nameButton);
而且风格是这样的:
NewText {
color: #000000;
background-color: #e2f1f8;
text-align: left;
padding-left: 2mm;
padding-right: 2mm;
padding-top: 1mm;
padding-bottom: 1px;
margin-left: 0;
margin-right: 0;
margin-top: 0;
margin-bottom: 0;
font-family: "native:MainLight";
font-size: 4.2mm;
}
NewSubText {
cn1-derive: NewText;
padding-top: 0mm;
padding-bottom: 1mm;
margin-bottom: 0mm;
color: #b0bec5;
font-size: 3.5mm;
}
NewIcon {
cn1-derive: NewText;
padding-top: 1mm;
padding-bottom: 1mm;
padding-left: 2mm;
padding-right: 2mm;
background-color: #e2f1f8;
}
为了实现我的目标是提供反馈给用户,我已经加入:
NewText.pressed {
cn1-derive: NewText;
background-color: #808d94;
}
NewText.selected {
cn1-derive: "NewText.pressed";
}
但是这会导致模拟器出错:
Error creating style NewText. selected: false prefix: press#[EDT] 0:1:2,42 - Error creating style NewText. selected: false prefix: press#
java.lang.StackOverflowErrorjava.lang.StackOverflowError
at com.codename1.io.Log.createWriter(Log.java:367)
at com.codename1.io.Log.getWriter(Log.java:384)
at com.codename1.io.Log.print(Log.java:348)
at com.codename1.io.Log.p(Log.java:284)
at com.codename1.io.Log.p(Log.java:274)
at com.codename1.ui.plaf.UIManager.getComponentStyleImpl(UIManager.java:356)
at com.codename1.ui.plaf.UIManager.createStyle(UIManager.java:1364)
at com.codename1.ui.plaf.UIManager.getComponentStyleImpl(UIManager.java:349)
at com.codename1.ui.plaf.UIManager.createStyle(UIManager.java:1364)
如果我一直按下按钮,最终会按下背景颜色。
顺便说一句,如果我只定义选择方式(无压式的)它不会编译:
java.lang.StackOverflowError
at com.codename1.ui.css.CSSTheme$Element.getFlattenedStyle(CSSTheme.java:2650)
因此,它看起来像有导致此栈溢出错误,但我的风格之间的循环依赖问题无法看到:NewText
选择器样式已完全定义。
这是什么false prefix press#
的意思,我该怎么做才能消除这个错误?
由于提前,
你有没有足够的时间来尝试这个小帮手库https://github.com/diamonddevgroup/cn1-helper,它对我来说非常有用,而且比CSS更易于使用。它可以让你在一行代码中完成大部分的样式。 – Diamond
谢谢戴蒙德帮助我知道这个帮手。如果我坚持我个人比较喜欢的css方式,我会试试看。 – HelloWorld