2017-10-11 6 views
1

CSSでスタイル化されたMultiButtonを押すと、ユーザーにフィードバックを与えたかっただけです。Codename Oneの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); 

そして、このようなスタイル:

MultiButtonがこのように使用しているユーザーにフィードバックを与えるために私の目標を達成するために

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) 

だから、このスタックオーバーフローエラーの原因となったスタイル間の循環依存関係の問題があるように見えますが、私where:NewTextセレクタスタイルが完全に定義されています。

false prefix press#の意味は何ですか。このエラーを取り除くにはどうすればよいですか?事前に

おかげで、

+1

この小さなヘルパーライブラリhttps://github.com/diamonddevgroup/cn1-helperを試してみたことがありますが、これは私にとってとても便利でCSSよりも使いやすくなっています。ほとんどの場合、コード内のスタイリングを1行で行うことができます。 – Diamond

+0

このヘルパーを私の知識に持ってくれてありがとうダイヤモンド。私は私が個人的に好むCSSの方法にこだわっているならば、私はそれを試してみましょう。 – HelloWorld

答えて

1

派生スタイル属性はとてもトリッキーである理由であるコンポーネント間の循環の継承の依存関係がある場合に発生します。継承がベーステーマで定義されることがあるため、何が起きているのか分かりにくいです。 MultiButtonButtonに由来する可能性があります。

+0

ありがとうShai。したがって、この場合、継承を避けるためにスタイルを貼り付けてコピーするのが最も簡単な解決策です。私はそれを試して、あなたの投稿を保ちます。 – HelloWorld

関連する問題