Flash Bulder 4.5とIconItemRenderer
Flash Builderでモバイル用プロジェクトを作成すると、ウィザードが提供されるアイテムレンダラーのクラスはIconItemRendererという、「項目の左側にアイコン」「1行の項目名」「複数行の説明」「右側にデコレーション」を置ける物になる。*1
意外と問題なのは「1行の項目名」という部分だ。個人的には「折り返し」も設定できるようにしておいてもらいたいのだが。「複数行の説明」という部分があるのだから、項目の表示サイズは元々可変になるようになっているはず。
試しに長い文字列を与えてみると、単に切り捨てるのではなく末尾に「…」を追加して省略するという細かい芸当をしてくれた(笑)
どこで「1行」と決まっているのかを調べてみると、IconItemRendererの上位クラス、LabelItemRendererで
protected function createLabelDisplay():void { labelDisplay = StyleableTextField(createInFontContext(StyleableTextField)); labelDisplay.styleName = this; labelDisplay.editable = false; labelDisplay.selectable = false; labelDisplay.multiline = false; labelDisplay.wordWrap = false; addChild(labelDisplay); }
と書かれている場所がある。ここでmultilineとwordWrapをtrueに設定できれば良いのであろう。(LabelItemRendererの上位クラスはUICompornentなので、アイテムレンダラーとしての機能を知るにはこれ以上さかのぼる必要がないはず。)
IconItemRendererを継承したクラスをつくってcreateLabelDisplay()を書きかえるのは比較的簡単にできそうだが、それを使えるようにする方法は別問題か?
ActionScriptより記述が楽そうなのでMXMLを優先的に使っているのだが、拡張したレンダラークラスを呼び出す部分はActionScriptでないとかけないようにも思える。(逆に言うと、ActionScriptならかけそうに思えるのでマシだが。)
まぁ、気の利いたことをするには結局常にActionScriptが必要であるらしい。
*1:右側に置く「アイコン」は項目ごとに別の物を指定する。「デコレータ」は単なる飾り、「アイコン」は意味のある物らしい。なので、左側に意味のない飾りを置くのは難しい。とりあえず、ActionScriptで「無意味な関数」を書いたりごちゃごちゃする。あと、アイコンはサイズ指定可能だけどデコレーターはサイズ指定できない。これはかなり問題。