发新话题
打印

[教材] 修改FLASH中组件样式(三)组件类修改

修改FLASH中组件样式(三)组件类修改

组件类修改”方法为:
_global.styles.组件.setStyle("样式",参数);
例如:要修改场景上的Button与ComboBox、List组件的文字颜色为绿色。代码如下:
_global.styles.ComboBox.setStyle("color", 0x4FA411);
_global.styles.Button.setStyle("color", 0x4FA411);
_global.styles.List.setStyle("color", 0x4FA411);
测试影片,可以发现,只有ComboBox的组件样式修改了。而Button与List组件的样式却没有变化。依旧是黑色。试试加入测试代码:
trace(_global.styles.ComboBox);
trace(_global.styles.Button);
trace(_global.styles.List)
出现了underfined,因此刚才的修改没有成功。
在第2版组件中,有些组件的样式会记录在_global.styles这个对象变量里,有些则不会。加入下面代码,就能获哪些组件的样式会记录。
for(var i in _global.styles){
trace(i+":"+_global.styles);
}
测试,效果如下:
引用:
rectBorderClass:[type Function]
HeaderDateText:[object Object]
TodayStyle:[object Object]
WeekDayStyle:[object Object]
CalendarLayout:[object Object]
DateChooser:[object Object]
Accordion:[object Object]
AccordionHeader:[object Object]
ProgressBar:[object Object]
View:[object Object]
ScrollView:[object Object]
Alert:[object Object]
dataGridStyles:[object Object]
windowStyles:[object Object]
Window:[object Object]
TextArea:[object Object]
TextInput:[object Object]
RectBorder:[object Object]
NumericStepper:[object Object]
ComboBox:[object Object]
ScrollSelectList:[object Object]
就表示,上面的这些组件的样式被包含在_global.styles变量里。而没有出现在上面的组件,则需用使用下面的方法:
因为组件样式都是CSSStyleDeclaration实例,因此为Button、List组件创建CSSStylesDeclaration实例:
import mx.styles.CSSStyleDeclaration;
_global.styles.Button=new CSSStyleDeclaration();
再测试代码,OK了。
完整代码如下:
引用:
/*---------- http://www.taoshaw.com -----------------*/
import mx.styles.CSSStyleDeclaration;
_global.styles.Button=new CSSStyleDeclaration();
_global.styles.ComboBox.setStyle("color", 0x4FA411);
_global.styles.Button.setStyle("color", 0x4FA411);
_global.styles.List.setStyle("color", 0x4FA411);
_global.styles.TextArea.setStyle("color",0x4FA411)
//AD
my_btn_url.onRelease=function():Void{
getURL("http://www.taoshaw.com","_blank")
}
/*---------- http://www.taoshaw.com -----------------*/
创建新组件样式前,建议先检查一下它是否已经存在了。
引用:

import mx.styles.CSSStyleDeclaration;
if (_global.styles.ComboBox == undefined) {
  _global.styles.ComboBox = new CSSStyleDeclaration();
}
if (_global.styles.Button == undefined) {
  _global.styles.Button = new CSSStyleDeclaration();
}
if (_global.styles.List== undefined) {
  _global.styles.List = new CSSStyleDeclaration();
}
_global.styles.List.setStyle("color", 0x4FA411);
_global.styles.TextArea.setStyle("color",0x4FA411)
修改FLASH中组件样式(三)组件类修改                                 

“组件类修改”方法为:
_global.styles.组件.setStyle("样式",参数);
例如:要修改场景上的Button与ComboBox、List组件的文字颜色为绿色。代码如下:
_global.styles.ComboBox.setStyle("color", 0x4FA411);
_global.styles.Button.setStyle("color", 0x4FA411);
_global.styles.List.setStyle("color", 0x4FA411);
测试影片,可以发现,只有ComboBox的组件样式修改了。而Button与List组件的样式却没有变化。依旧是黑色。试试加入测试代码:
trace(_global.styles.ComboBox);
trace(_global.styles.Button);
trace(_global.styles.List)
出现了underfined,因此刚才的修改没有成功。
在第2版组件中,有些组件的样式会记录在_global.styles这个对象变量里,有些则不会。加入下面代码,就能获哪些组件的样式会记录。
for(var i in _global.styles){
trace(i+":"+_global.styles);
}
测试,效果如下: rectBorderClass:[type Function]
HeaderDateText:[object Object]
TodayStyle:[object Object]
WeekDayStyle:[object Object]
CalendarLayout:[object Object]
DateChooser:[object Object]
Accordion:[object Object]
AccordionHeader:[object Object]
ProgressBar:[object Object]
View:[object Object]
ScrollView:[object Object]
Alert:[object Object]
dataGridStyles:[object Object]
windowStyles:[object Object]
Window:[object Object]
TextArea:[object Object]
TextInput:[object Object]
RectBorder:[object Object]
NumericStepper:[object Object]
ComboBox:[object Object]
ScrollSelectList:[object Object]


就表示,上面的这些组件的样式被包含在_global.styles变量里。而没有出现在上面的组件,则需用使用下面的方法:
因为组件样式都是CSSStyleDeclaration实例,因此为Button、List组件创建CSSStylesDeclaration实例:
import mx.styles.CSSStyleDeclaration;
_global.styles.Button=new CSSStyleDeclaration();
再测试代码,OK了。
完整代码如下:

/*---------- http://www.taoshaw.com -----------------*/
import mx.styles.CSSStyleDeclaration;
_global.styles.Button=new CSSStyleDeclaration();
_global.styles.ComboBox.setStyle("color", 0x4FA411);
_global.styles.Button.setStyle("color", 0x4FA411);
_global.styles.List.setStyle("color", 0x4FA411);
_global.styles.TextArea.setStyle("color",0x4FA411)
//AD
my_btn_url.onRelease=function():Void{
  getURL("http://www.taoshaw.com","_blank")
}
/*---------- http://www.taoshaw.com -----------------*/

创建新组件样式前,建议先检查一下它是否已经存在了。 import mx.styles.CSSStyleDeclaration;
if (_global.styles.ComboBox == undefined) {
  _global.styles.ComboBox = new CSSStyleDeclaration();
}
if (_global.styles.Button == undefined) {
  _global.styles.Button = new CSSStyleDeclaration();
}
if (_global.styles.List== undefined) {
  _global.styles.List = new CSSStyleDeclaration();
}
_global.styles.List.setStyle("color", 0x4FA411);
_global.styles.TextArea.setStyle("color",0x4FA411)

演示:


当涉及修改组件滚动条(列表)样式的时候,要注意一下。
由于ComboBox、DataGrid、List、MenuBar里面的Menu和Tree组件都需要一个List(滚动列表)。第2版组件设计的时候,是将这些“列表”归纳为ScrooSelectList类,让其他组件来继承,凡涉及“列表”的修改,只要修改ScrooSelectList类的样式,所有包含“列表”的组件都会同时修改。十分方便和统一。但是,当某个别组件需要修改时,这种“全局修改”是不行的。
所以,需要使用“组件类修改”,方法,就是创建一个CSSStyleDeclaration实例将组件的全局样式覆盖。但,这样,也会出一个问题:就是失去旧样式。为了保留旧有样式,需要另从ScrooSelectList类复制回来。
如:修改List组件的文字颜色为绿色:
import mx.styles.CSSStyleDeclaration;
if(_global.styles.List==undefined){
_global.styles.List=new CSSStyleDeclaration();
}
_global.styles.List.setStyle("color",0x00ff00);
测试,发现文字颜色虽然改变了,但是背景却不见了。而且List也不能接收鼠标事件了。(因为样式属性backgroundColor被覆盖了。),因此,正确的做法是加回backgroundColor样式属性:
_global.styles.List.setStyle("backgroundColor",0x00ff00);
或者,将所有旧有样式属性复制到新样式里(加粗部分):
引用:
/*---------- http://www.taoshaw.com -----------------*/
import mx.styles.CSSStyleDeclaration;
if (_global.styles.List == undefined) {
_global.styles.List = new CSSStyleDeclaration();
}
var stylesSrc = _global.styles.ScrollSelectList;
var stylesTarget = _global.styles.List;
for (var i in stylesSrc) {
stylesTarget.setStyle(i, stylesSrc.getStyle(i));
}
_global.styles.List.setStyle("color", 0x00ff00);
_global.styles.List.setStyle("backgroundColor", 0xffffff);
//AD
my_btn_url.onRelease=function():Void{
getURL("http://www.taoshaw.com","_blank")
}
/*---------- http://www.taoshaw.com -----------------*/
演示:
我的主页:http://www.taoshaw.com
我的QQ:8286659

TOP

好教程.
80find 实时知道论坛新贴, 帖子回复.
管理论坛和冲浪论坛的好帮手.

TOP

发新话题