カスタムItemRenderer(IR)を含むTileListがあります。IRは、TextInput、TextArea、またはComboBoxにすることができます。行にTextAreaがある場合、この行の高さを他の行よりも高くしたいと思います。結局、すべての行が同じ高さである必要があるかどうかは気にしません。私が気にしているのは、TextAreaが含まれていないフォームがある場合、行の高さを可能な限り低くしたいということです。
いくつかの作業の後、私は次のコードを達成しました。しかし、同封のスクリーンショットでお気づきのように、私は私が望むものを達成していません。初めてフォームに入力したときは間違っているように見えますが、2回目に入力したときは問題ないように見えます。ただし、フィールドが異なる別のフォームに入力し、直前に開いたフォームを再度開くと、再び間違って表示されます。見た目が悪いと、すべての列が標準の高さを持っているようです。
私が欠けているものは何ですか?TileListを何らかの方法でカスタマイズする必要がありますか?invalidateDisplayListとinvalidateSizeを間違った場所に配置しましたか?
フォーム1のケースが間違っています:http:
//flic.kr/p/bfJSUM
フォーム1のケースOK: http:
//flic.kr/p/bfJSQT
フォーム2のケースが間違っています:http:
//flic.kr/p/bfJSSn
フォーム2ケースOK: http:
//flic.kr/p/bfJUwe
TileList:
<mx:VBox id="camposextras" visible="true" verticalGap="0" horizontalGap="0" width="100%" height="100%" >
<mx:TileList wordWrap="true" variableRowHeight="true" width="100%" textAlign="left" columnCount="2" dataProvider="{model.specialfield_issue_list}" itemRenderer="org.nevis.cairngorm.mod.view.IRCampoEspecial" direction="horizontal">
</mx:TileList>
</mx:VBox>
ItemRenderer:
<?xml version="1.0"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
horizontalAlign="left" verticalAlign="middle"
verticalGap="0" borderStyle="none" width="100%"
horizontalScrollPolicy="off" verticalScrollPolicy="off"
>
<mx:Script>
<![CDATA[
import mx.controls.TextArea;
import mx.controls.Text;
import org.nevis.cairngorm.mod.model.ModelLocator;
import mx.core.UIComponent;
import mx.controls.Label;
import mx.controls.ComboBox;
import mx.controls.TextInput;
import utils.Utils;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
[Bindable]
public var model:ModelLocator=ModelLocator.getInstance();
[Bindable]
private var fieldLabelVisible:Boolean = false;
[Bindable]
private var textInputVisible:Boolean = false;
[Bindable]
private var textAreaVisible:Boolean = false;
[Bindable]
private var comboBoxVisible:Boolean = false;
[Bindable]
private var mandatoryLabelVisible:Boolean = false;
[Bindable]
private var _contenedorHeight:int = 25;
public function updata_valor_text(valor:Event):void {
data.value=valor.currentTarget.text;
}
public function updata_valor_combo(valor:Event):void {
data.value=valor.currentTarget.selectedItem.valuesspecialfieldid
}
/**
* Make sure IR has real variable height for rows
*/
override public function get height():Number {
//Make sure variableRowHeight is set to true in the container of this IR
return _contenedorHeight;
}
override public function set height(value:Number):void {
_contenedorHeight = value;
}
override public function set data(value:Object):void {
var i:int;
var sel:int;
super.data = value;
callLater(function onceAllCreated():void{
if (value){
_contenedorHeight = 25; //Default value
fieldLabelVisible = true;
lb.text=value.spe_name;
lb.toolTip=value.spe_description;
lb.width=150;
lb.name='etiqueta';
lb.styleName='texto-iza';
switch (value.type){
case "text":
if(value.spe_max<=40) {
ti.text=value.value;
ti.name='texto';
ti.maxChars=value.spe_max;
if(value.spe_max<=20) {
ti.width=150;
} else {
ti.width=300;
}
textInputVisible = true;
} else {
ta.text=value.value;
ta.name='texto';
ta.maxChars=value.spe_max;
ta.width=300;
textAreaVisible = true;
_contenedorHeight = 60;
}
break;
case "select":
cb.labelField='val_value';
cb.name='seleccionable';
cb.width=150;
comboBoxVisible = true;
break;
default:break;
}
if (value.spe_mandatory==1){
mandatory.text="*";
mandatory.toolTip="Mandatory";
mandatory.width=10;
mandatory.name='mandatory';
mandatory.styleName='texto-iza';
mandatoryLabelVisible = true;
}
} else {
fieldLabelVisible = false;
textInputVisible = false;
textAreaVisible = false;
comboBoxVisible = false;
mandatoryLabelVisible = false;
}
invalidateDisplayList();
invalidateSize();
});
}
]]>
</mx:Script>
<mx:HBox id="contenedor" toolTip="{data.spe_description}" verticalAlign="middle" horizontalAlign="left" width="100%" height="{_contenedorHeight}">
<mx:Label id="lb" visible="{fieldLabelVisible}" includeInLayout="{fieldLabelVisible}"/>
<mx:TextInput id="ti" visible="{textInputVisible}" includeInLayout="{textInputVisible}" change="updata_valor_text(event)"/>
<mx:TextArea id="ta" visible="{textAreaVisible}" includeInLayout="{textAreaVisible}" height="50" change="updata_valor_text(event)"/>
<mx:ComboBox id="cb" visible="{comboBoxVisible}" includeInLayout="{comboBoxVisible}" change="updata_valor_combo(event)"/>
<mx:Label id="mandatory" visible="{mandatoryLabelVisible}" includeInLayout="{mandatoryLabelVisible}"/>
</mx:HBox>
</mx:VBox>
注:これは古いアプリであり、Flex 2 SDK 2.0.1Hotfix3で実行されます。
ご協力いただきありがとうございます!