この潜在的なバグをFlashのコンボボックスコンポーネントで修正するにはどうすればよいですか?
-
01-10-2019 - |
質問
コンボボックスコンポーネントをスプライトに追加すると、コンテナの高さは本来よりも大きくなります。
これが私の意味です:
import fl.controls.ComboBox;
//add combo box inside a container sprite
var combo:ComboBox = new ComboBox();
var container:Sprite = new Sprite();
addChild(container);
container.addChild(combo);
//draw the outline of the container sprite
container.graphics.lineStyle(1,0x009900);
container.graphics.drawRect(0,0,container.width,container.height);
//I don't get this:
trace(combo.height);//outputs 22
trace(container.height);//outputs 101
ノート: ライブラリにコンボボックスコンポーネントが必要になります。このためにフラッシュCS3を使用しています。
私がこのように無効/再描画をした場合:
combo.invalidate(InvalidationType.ALL,true);
combo.drawNow();
高さは101から104に変化します。
解決策はありますか?
アップデート:ConfigUIメソッドをコンボボックスサブクラスで上書きしましたが、測定は常に正しいです。コンテナの高さが100に変わるのはなぜですか?
解決
これは、Adobeがフラッシュコンポーネントの愚かな移植のためです。フラッシュアイデア内のコンポーネントの2番目のフレームを見ると、初期サイズを返す一時的なアバターがわかります。
これを解決するには、アバターの子供たちを反復し、そのサイズを正常化する必要があります。
public static function normalizedComponent(component:Sprite):void {
for (var i:int = 0; i < component.numChildren; i++) {
component.getChildAt(i).height = component.height;
component.getChildAt(i).width = component.width;
}
}
利用方法:
var comboBox:ComboBox = new ComboBox();
normalizedComponent(comboBox);
normalizedComponent(comboBox.textField);
他のヒント
「開いた場合、ドロップダウンボックスの高さ」
うーん、ボタンの下のディスプレイリストにリストを追加すると、実際に追加されたポップアップがあると思います。したがって、スプライトには実際にドロップダウンリストが含まれないため、高さはボタンの高さのままになるはずです。
容器の高さが間違っている可能性のある理由は、無効化を経る前に、含まれている子供が原因である可能性があります。たぶん、コンボボックススキン(高さ102pxのモービックリップ)または常に高さ102pxまたは奇妙な高さで始まるコンボボックスサブコンポーネント(ボタンのテキストフィールドは間違っていることがわかっています)。
簡単な解決策は、CreationComplete/追加のイベントまで待って、最終的な高さを確認してから、境界線を描くことです。
私はこれがaだとは思わない ComboBox
排他的なバグ。
コンポーネントを追加するとき Button
に Sprite
コンテナボタンとコンテナ寸法をトレースすると、さまざまな結果が得られます。実際、私は同じことを受け取ります 100 x 100
結果。
ドロップダウンボックスの可能性を捨てます。 Button
コンポーネントにはありません。
回避策は2つのコンポーネントオブジェクトで同じになると思います(ComboBox
と Button
)、しかし、私はまだ解決策を見つけていません。私がそうするときに更新します。
アップデート:
私はこれを使用して機能させることができました validateNow()
, 、そして数分後 - 次のリンクを見つけました。 http://forums.adobe.com/message/816912?tstart=0
基本的に、リンクは私たちに置くように指示します validateNow()
内側に電話します EnterFrame
イベント、または内部 SetTimeout
適切なタイミングで。
だから - 私はの表示された高さだと思います コンボボックス それは 実際 高さ-IDEST、開いている場合、ドロップダウンボックスの高さは、そうでない場合はそうではありません。ただし、アイテムはまだそこにありますが、visibleセットがあります 偽, 、それがまだ見えなくても、それはまだ容器を拡張します...したがって、私はそうすると言うでしょう:
container.graphics.drawRect(0, 0, combo.width, combo.height);
それが通常もそれを行う方法です...
このコードの前に手動でセットアップできますか:
container.width=100;
container.height=100;
container.graphics.drawRect(0,0,container.width,container.height);
こんにちは私はどこかで、numericstepperの同様の問題の解決策を見つけました。
解決策は次のとおりです。
var tInput:TextInput = numericStepper.getChildAt(2) as TextInput;
tInput.textField.height = 22;
あなたの場合、次のことを試してください。
var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22;