2017-10-11 19 views
1

我只是想在用户按下在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#的意思,我该怎么做才能消除这个错误?

由于提前,

+1

你有没有足够的时间来尝试这个小帮手库https://github.com/diamonddevgroup/cn1-helper,它对我来说非常有用,而且比CSS更易于使用。它可以让你在一行代码中完成大部分的样式。 – Diamond

+0

谢谢戴蒙德帮助我知道这个帮手。如果我坚持我个人比较喜欢的css方式,我会试试看。 – HelloWorld

回答

1

这种情况发生时,有部件之间的循环继承依赖这就是为什么派生样式属性是如此棘手。很难看出发生了什么,因为有时继承是在基本主题中定义的,例如MultiButton可能来自Button

+0

谢谢谢。所以最简单的解决方案是复制粘贴样式以避免在这种情况下继承。我会试一试并保持发布。 – HelloWorld