2010-03-24 66 views

回答

1

我發現了一個解決方案:D這裏是代碼

訣竅在於覆蓋updateDisplayList。

快樂的黑客攻擊。

package 
{ 
import flash.display.DisplayObject; 

import mx.controls.Image; 
import mx.controls.TextInput; 
import mx.core.mx_internal; 

use namespace mx_internal; 

public class MyTextInput extends TextInput 
{ 
    private var _image:Image; 

    public function MyTextInput() 
    { 
     super(); 
    } 

    override protected function createChildren():void 
    { 
     super.createChildren(); 

     _image = new Image(); 
     _image.source = "http://sstatic.net/so/img/replies-off.png", 

     addChild(DisplayObject(_image)); 
    } 

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
    { 
     super.updateDisplayList(unscaledWidth, unscaledHeight); 

     this._image.width = 16; 
     this._image.height = 16; 

     this._image.x = this.width - this._image.width - 5; 
     this._image.y = this.height - this._image.height; 

     this.textField.width = this.width - this._image.width - 5; 
    } 
} 
} 
1

更簡單的方法來做到這一點是創建一個MXML組件,它看起來像你想要的文字輸入。我從來沒有見過mac OSX搜索框,但根據你的描述,一個基於畫布的組件基於白色背景,而適當的寄宿者可以包含一個圖像和一個沒有邊界的文本輸入。這會讓你看起來像我想的那樣。

+0

我試圖避免這種情況的解決方法,因爲如果我們改變了文本輸入的樣式,我不想去該組件並重新創建的樣式和花時間試圖給畫布適當的樣子感覺,但謝謝你的提示。 – Felipe 2010-03-25 20:26:36

+0

我可以理解,但明白這不是解決方法;這是Flex設計的目的。事實上,如果你這樣做了一次,使用flex構建器的gui設計模式,它實際上會更容易更新和更改。 – invertedSpear 2010-03-25 20:40:59