[转]mx:RadioButton定制皮肤,去掉默认Icon

本文介绍如何在Flex中自定义mx:RadioButton的外观,包括去除默认图标及应用自定义皮肤。

原作者: 

http://blog.dreamhui.net/archives/38
 

 

近日要写一个用于皮肤选择的TitleWindow,因为是单选,所以用到单选框mx:RadioButton,但是想用自定义皮肤来定制mx:RadioButton的默认外观,并想去掉前面作为Icon的小圈圈,找了资料,终于解决了。

mx:RadioButton的样式里面有关于Icon的声明。

因为icon属性只接受Class类型参数,所以如果在CSS样式表中做修改的,不太方便。所以我选择在MXML文件中将其赋予空的Class对象引用,这将覆盖掉默认的前面的小圈圈做icon。然后再在CSS中定义其皮肤。源文件如下:

mxml文件:

? View Code MXML

 

ExpandedBlockStart.gif 代码
<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< s:TitleWindow xmlns:fx = " http://ns.adobe.com/mxml/2009 "  
    xmlns:s
= " library://ns.adobe.com/flex/spark "  
    xmlns:mx
= " library://ns.adobe.com/flex/mx "
    title
= " 选择您喜欢的留言皮肤 "
    close
= " skinPanelClose() "
    styleName
= " skinSelPanel "
    initialize
= " init() " >
 
    
<!--~~~~~~~~~~~~~~~~~~~~~~~ Script ~~~~~~~~~~~~~~~~~~~~~~~-->
    
< fx:Script >
        
<! [CDATA[
            import events.SkinSelEvent;
 
            import mx.controls.Alert;
            import mx.core.FlexGlobals;
            import mx.events.FlexEvent;
            import mx.events.ItemClickEvent;
            import mx.managers.PopUpManager;
 
            [Bindable]
            
private  var iconRB:Class  =   null   as  Class;
            
// 去掉RadioButton前面的icon小圈圈
 
            
private  var selArray:Array  =   new  Array();
            
// 放置前一项的选择对象(RadioButton)引用
 
            
private  var defaultSkin:String  =   " 6 " ;
            
// 用户未做选择时候的默认皮肤
 
            
/* *
             * 窗口初始化,将默认皮肤选项的RadioButton添加滤镜
             * 
*/
            
protected  function init(): void
            {
                selArray.push(radioBtn6);
                radioBtn6.filters 
=  [glow];
            }
 
            
public   static  function show():skinSelPanel
            {
                var skinPanel:skinSelPanel 
=  skinSelPanel(PopUpManager.createPopUp(DisplayObject(FlexGlobals.topLevelApplication),skinSelPanel, true ));
                PopUpManager.centerPopUp(skinPanel);
                
return  skinPanel;
            }
 
            
/* *
             * 窗口关闭时候,将选择结果以事件形式返给主应用程序
             * 
*/
            
protected  function skinPanelClose(): void
            {
                PopUpManager.removePopUp(
this );
                var skinSelEvent:SkinSelEvent 
=   new  SkinSelEvent(SkinSelEvent.SKIN_SHOT);
                
if (skinShotGroup.selection)
                {
                    defaultSkin 
=  skinShotGroup.selectedValue.toString();
                }
                skinSelEvent.skinShot 
=  defaultSkin;
 
                dispatchEvent(skinSelEvent);
            }
 
            
/* *
             * 用户做选择的时候,将数组selArray中的前一项代表的对象引用的滤镜去掉
             * 并给当前所选项添加滤镜,以便标识
             * 
*/
            
protected  function skinShotClick( event :ItemClickEvent): void
            {
                
// selArray = new Array();
                
// 如果在此初始化,每次都清空该数组,不能保留上一次点击的结果
                selArray.push(skinShotGroup.selection);
                
if (selArray.length  >   1 )
                {
                    var rbtn:RadioButton 
=  selArray[selArray.length - 2 ];
                    
// Alert.show(rbtn.name);
                    rbtn.filters  =   null ;
                }
                skinShotGroup.selection.filters 
=  [glow];
                
// 将用户当前所选项添加滤镜,以便标识
            }
 
        ]]
>
    
</ fx:Script >
 
    
<!--~~~~~~~~~~~~~~~~~~~~~~~ Declarations ~~~~~~~~~~~~~~~~~~~~~~~-->
    
< fx:Declarations >
        
<!-- 声明RadioButtonGroup -->
        
< mx:RadioButtonGroup id = " skinShotGroup "  itemClick = " skinShotClick(event) " />
 
        
<!-- 声明滤镜glow -->
        
< s:GlowFilter id = " glow "  blurX = " 40 "  blurY = " 40 "  color = " 0xffffff "   />
    
</ fx:Declarations >
 
    
<!--~~~~~~~~~~~~~~~~~~~~~~~ UI Components ~~~~~~~~~~~~~~~~~~~~~~~-->
    
< s:HGroup width = " 100% "  height = " 100% "  id = " rbtnHG " >
        
< s:VGroup width = " 30% "  height = " 90% " >
            
< mx:RadioButton value = " 1 "  styleName = " radioBtn1 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
            
< mx:RadioButton value = " 2 "  styleName = " radioBtn2 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
            
< mx:RadioButton value = " 3 "  styleName = " radioBtn3 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
            
< mx:Button id = " submit "  label = " 确定 "  styleName = " skinSubmit "  click = " skinPanelClose() "   />
        
</ s:VGroup >
        
< s:VGroup width = " 30% "  height = " 90% " >
            
< mx:RadioButton value = " 4 "  styleName = " radioBtn4 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
            
< mx:RadioButton value = " 6 "  id = " radioBtn6 "  styleName = " radioBtn6 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
            
< mx:RadioButton value = " 5 "  styleName = " radioBtn5 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
        
</ s:VGroup >
        
< s:VGroup width = " 30% "  height = " 90% " >
            
< mx:RadioButton value = " 7 "  styleName = " radioBtn7 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
            
< mx:RadioButton value = " 8 "  styleName = " radioBtn8 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
            
< mx:RadioButton value = " 9 "  styleName = " radioBtn0 "  group = " {skinShotGroup} "  buttonMode = " true "  icon = " {iconRB} "   />
        
</ s:VGroup >
    
</ s:HGroup >
 
</ s:TitleWindow >


SS文件部分:

? View Code CSS
ExpandedBlockStart.gif 代码
.skinSelPanel
{
    backgroundAlpha:
0.7 ;
    backgroundColor:#
000000 ;
    borderVisible:
false ;
    corner
- radius: 5 ;
    chrome
- color:#F579FB;
    content
- background - alpha: 0 ;
    color:#ffffff;
    text
- align:left;
    font
- size: 16 ;
    font
- weight:bold;
 
}
.radioBtn0
{
    up
- skin:ClassReference( " skins.messSkinblackBlue " );
    over
- skin:ClassReference( " skins.messSkinblackBlue " );
    down
- skin:ClassReference( " skins.messSkinblackBlue " );
    selected
- disabled - skin:ClassReference( " skins.messSkinblackBlue " );
    selected
- down - skin:ClassReference( " skins.messSkinblackBlue " );
    selected
- up - skin:ClassReference( " skins.messSkinblackBlue " );
    selected
- over - skin:ClassReference( " skins.messSkinblackBlue " );
}
.radioBtn1
{
    up
- skin:ClassReference( " skins.messSkinBlue " );
    over
- skin:ClassReference( " skins.messSkinBlue " );
    down
- skin:ClassReference( " skins.messSkinBlue " );
    selected
- disabled - skin:ClassReference( " skins.messSkinBlue " );
    selected
- down - skin:ClassReference( " skins.messSkinBlue " );
    selected
- up - skin:ClassReference( " skins.messSkinBlue " );
    selected
- over - skin:ClassReference( " skins.messSkinBlue " );
}
.radioBtn2
{
    up
- skin:ClassReference( " skins.messSkincircleGreen " );
    over
- skin:ClassReference( " skins.messSkincircleGreen " );
    down
- skin:ClassReference( " skins.messSkincircleGreen " );
    selected
- disabled - skin:ClassReference( " skins.messSkincircleGreen " );
    selected
- down - skin:ClassReference( " skins.messSkincircleGreen " );
    selected
- up - skin:ClassReference( " skins.messSkincircleGreen " );
    selected
- over - skin:ClassReference( " skins.messSkincircleGreen " );
}
.radioBtn3
{
    up
- skin:ClassReference( " skins.messSkinleftBlue " );
    over
- skin:ClassReference( " skins.messSkinleftBlue " );
    down
- skin:ClassReference( " skins.messSkinleftBlue " );
    selected
- disabled - skin:ClassReference( " skins.messSkinleftBlue " );
    selected
- down - skin:ClassReference( " skins.messSkinleftBlue " );
    selected
- up - skin:ClassReference( " skins.messSkinleftBlue " );
    selected
- over - skin:ClassReference( " skins.messSkinleftBlue " );
}
.radioBtn4
{
    up
- skin:ClassReference( " skins.messSkinrectGreen " );
    over
- skin:ClassReference( " skins.messSkinrectGreen " );
    down
- skin:ClassReference( " skins.messSkinrectGreen " );
    selected
- disabled - skin:ClassReference( " skins.messSkinrectGreen " );
    selected
- down - skin:ClassReference( " skins.messSkinrectGreen " );
    selected
- up - skin:ClassReference( " skins.messSkinrectGreen " );
    selected
- over - skin:ClassReference( " skins.messSkinrectGreen " );
}
.radioBtn5
{
    up
- skin:ClassReference( " skins.messSkinRed " );
    over
- skin:ClassReference( " skins.messSkinRed " );
    down
- skin:ClassReference( " skins.messSkinRed " );
    selected
- disabled - skin:ClassReference( " skins.messSkinRed " );
    selected
- down - skin:ClassReference( " skins.messSkinRed " );
    selected
- up - skin:ClassReference( " skins.messSkinRed " );
    selected
- over - skin:ClassReference( " skins.messSkinRed " );
}
.radioBtn6
{
    up
- skin:ClassReference( " skins.messSkinrightBlue " );
    over
- skin:ClassReference( " skins.messSkinrightBlue " );
    down
- skin:ClassReference( " skins.messSkinrightBlue " );
    selected
- disabled - skin:ClassReference( " skins.messSkinrightBlue " );
    selected
- down - skin:ClassReference( " skins.messSkinrightBlue " );
    selected
- up - skin:ClassReference( " skins.messSkinrightBlue " );
    selected
- over - skin:ClassReference( " skins.messSkinrightBlue " );
}
.radioBtn7
{
    up
- skin:ClassReference( " skins.messSkinrightGreen " );
    over
- skin:ClassReference( " skins.messSkinrightGreen " );
    down
- skin:ClassReference( " skins.messSkinrightGreen " );
    selected
- disabled - skin:ClassReference( " skins.messSkinrightGreen " );
    selected
- down - skin:ClassReference( " skins.messSkinrightGreen " );
    selected
- up - skin:ClassReference( " skins.messSkinrightGreen " );
    selected
- over - skin:ClassReference( " skins.messSkinrightGreen " );
}
.radioBtn8
{
    up
- skin:ClassReference( " skins.messSkinzise " );
    over
- skin:ClassReference( " skins.messSkinzise " );
    down
- skin:ClassReference( " skins.messSkinzise " );
    selected
- disabled - skin:ClassReference( " skins.messSkinzise " );
    selected
- down - skin:ClassReference( " skins.messSkinzise " );
    selected
- up - skin:ClassReference( " skins.messSkinzise " );
    selected
- over - skin:ClassReference( " skins.messSkinzise " );
}


 

运行的最终结果:

其中带有白色发光滤镜的,为当前所选择。

转载于:https://www.cnblogs.com/4kapple/archive/2011/01/31/1948384.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值