Flex Label組件擴展邊框與背景


效果預覽:

由於Label控件沒有borderStyle屬性,也就是它不支持邊框與背景圖.所以我們可以通過擴展Label控件來實現邊框與背景圖!其他不支持邊框或者背景的控件如:Text、Image用同樣方法可以擴展它。下面運用到自定義Flex控件的[Style]元素標籤。

下表描述了[Style]元數據標籤的屬性:

選項 類型 描述
name
String (必須) 指定樣式名稱。
type
String 指定樣式屬性值的數據類型。如果類型不是一個像Number、Date這樣的ActionScript類型,就要使用packageName.className。
arrayType
String 如果type是Array,那麼arrayType指定Array元素的數據類型。如果類型不是一個像Number、Date這樣的ActionScript類型,就要使用 packageName.className。
format
String 指定屬性單元。比如,如果你指定類型爲”Number”,你可能指定format=”Length”表示該樣式定義像素長度。或者,你指定type=”uint”,設置format=”Color”,表示該樣式定義一個RGB顏色。
enumeration
String 指定該樣式屬性可能的枚舉列表值。
inherit
String 指定該屬性是否爲繼承的。有效的值爲yes和no。該屬性引用CSS繼承結構,而非面向對象的繼承結構。所有的子類都自動用面向對象的繼承從超類繼承定義的樣式屬性。一些樣式屬性以CSS繼承的方式繼承樣式屬性。如果你在父容器上定義了一個可繼承的樣式屬性,它的孩子都會繼承該樣式屬性。比如,如果你把一個Panel容器的fontFamily定義成Times,該容器的所有孩子都會使用Times作爲fontFamily,除非它們覆蓋了這個屬性。如果設置了非可繼承的樣式,比如在父容器上設置textDecoration,那麼只有這個父容器而非它的孩子使用這個樣式。更多關於可繼承的樣式屬性的信息,請閱讀 關於樣式繼承
states
String 對於皮膚屬性,你可以使用這個樣式指定組件多種狀態中的一種狀態。例如,Slider.thumbSkin樣式的定義使用下面的[Style]元數據標籤:[Style(name="thumbSkin", type="Class", inherit="no", states="disabled, down,
over, up")]
這一行說明你可以使用Slider.thumbSkin樣式指定Slider控件的disable, down, over, 和 up 的狀態。更多信息,請閱讀 創建皮膚.

LabelBorder.as

  1. package 
  2. {
  3.     import mx.controls.Label;
  4.     //自定義樣式
  5.     [Style(name="borderColor"type="uint"format="Color"inherit="no")]  
  6.     [Style(name="borderWidth"type="Number"format="Length"inherit="no")]  
  7.     [Style(name = "borderAlpha"type = "Number"format = "Length"inherit = "no")] 
  8.    
  9.     public class LabelBorder extends Label
  10.     {
  11.         public function LabelBorder()
  12.         {
  13.             super();
  14.         }
  15.        
  16.         override protected function updateDisplayList(w:Numberh:Number):void
  17.         {
  18.             super.updateDisplayList(wh);
  19.             graphics.clear();
  20.             graphics.lineStyle(getStyle('borderWidth')getStyle('borderColor')getStyle('borderAlpha')false);
  21.             var x:Number = -(getStyle('borderWidth') / 2);
  22.             var y:Number = -(getStyle('borderWidth') / 2);
  23.             var width:Number = textWidth + getStyle('borderWidth') + 3;
  24.             var height:Number = textHeight + getStyle('borderWidth');
  25.             graphics.drawRect(xywidthheight);
  26.         }
  27.     }
  28. }

LabelImage.as

  1. package 
  2. {
  3.     import mx.controls.Label
  4.     import flash.display.Loader;
  5.     import flash.net.URLRequest;
  6.     //自定義背景屬性
  7.     [Style(name="imgPath"type="String"inherit="no")]  
  8.    
  9.     public class LabelImage extends Label
  10.     {
  11.         private var _loader:Loader = new Loader();
  12.        
  13.         public function LabelImage()
  14.         {
  15.             super();
  16.         }
  17.        
  18.         override protected function updateDisplayList(w:Numberh:Number):void
  19.         {
  20.             super.updateDisplayList(wh);
  21.             _loader.load(new URLRequest(getStyle('imgPath')));
  22.             addChild(_loader);
  23.             _loader.x = -15;
  24.             setChildIndex(_loader0);
  25.         }
  26.     }
  27. }

LabelBorderDemo.mxml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:jian="*" layout="absolute">
  3.     <jian:LabelBorder 
  4.         x="180" y="62"
  5.         text="這裏是擴展的自定義標籤"
  6.         borderAlpha="{aBar.value}"   
  7.         borderWidth="{wBar.value}"   
  8.         borderColor="{colorTool.selectedColor}" />
  9. <jian:LabelImage text="這裏是自定義背景標籤" imgPath="mood.gif" x="180" y="100" />
  10.           
  11.     <mx:Label x="500" y="10" text="邊框顏色:" />  
  12.     <mx:Label x="500" y="50" text="邊框透明度:" />  
  13.     <mx:Label x="500" y="100" text="邊框寬度:" />  
  14.       
  15.     <mx:ColorPicker id="colorTool" x="570" y="10" color="#FDFDFD" />  
  16.     <mx:HSlider id="aBar" x="500" y="70" minimum="0" maximum="1" value="1" snapInterval="0.1" liveDragging="true"/>  
  17.     <mx:HSlider id="wBar" x="500" y="120" minimum="0" maximum="6" snapInterval="1" value="1" liveDragging="true"/
  18. </mx:Application>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章