Actionscript 3 Flex4:创建用于应用程序的CSS文件的问题

Actionscript 3 Flex4:创建用于应用程序的CSS文件的问题,actionscript-3,apache-flex,actionscript,flex4,Actionscript 3,Apache Flex,Actionscript,Flex4,我使用一个文件来声明CSS样式: /* CSS file */ @namespace s "library://ns.adobe.com/flex/spark"; @namespace mx "library://ns.adobe.com/flex/mx"; @namespace view "com.myviews.*"; @namespace comp "com.myviews.mycomponents.*"; @font-face { font-family:arial_s;

我使用一个文件来声明CSS样式:

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace view "com.myviews.*";
@namespace comp "com.myviews.mycomponents.*"; 

@font-face {
    font-family:arial_s;
    src:url("Fonts/Arial.ttf");
    embed-as-cff:true;
    font-weight:normal;
    font-style:normal
}

@font-face {
    font-family:arial_mx;
    src:url("Fonts/Arial.ttf");
    embed-as-cff:false;
    font-style:normal;
    font-weight:normal;
}

global {
    font-family:arial_s; font-size:12.5;  
}

s|DropDownList {
    cornerRadius:0;
}
问题1:我在s | DropDownList的上面一行得到了以下警告:

未处理CSS类型选择器“spark.components.DropDownList”,因为该类型未在应用程序中使用。

但是它在应用程序中使用,在这里更改它的值确实会产生影响。知道我为什么会收到这个警告吗

问题2:当我在调试模式下运行应用程序时,我得到警告:

警告:为mx.core::UITextFormat指定了不兼容的嵌入式字体“arial_”。此组件要求使用embedAsCFF=false声明嵌入字体。

警告之所以出现,是因为我对上面的spark组件使用了
global
属性,这导致它应用于所有组件,包括一些mx组件。这里感兴趣的组件是DataGrid单元格中的文本。我只需要弄清楚如何分别定义mx.core::UITextFormat的样式。你知道这个的语法是什么吗?我试过:

mx|UITextFormat {
    font-family:arial_mx;
}  

但它不起作用。不知道该怎么办

UITextFormat的文档不包含任何CSS样式

这只是一种预感,但由于UITextFormat实际上只是一种应用于UITextField的格式,也许您可以将字体样式应用于UITextField对象:

mx|UITextField {
    font-family:arial_mx;
}
关于DropDownList的第一个问题,DownDownList是否可能在库项目中而不是实际在应用程序项目中?如果是这样,您可以为库项目创建defaults.css

[编辑]

字体问题困扰着我:)我查看了DefaultGridItemRenderer:它扩展了UITextField。因此,要使用嵌入式字体,它必须将其
embedFonts
属性设置为true。然后它还需要一个UITextFormat对象,该对象引用嵌入的字体

您可以扩展DefaultGridItemRenderer来实现这一点,但我认为Adobe可能会简化这一过程,并研究了以下DataGrid样式。对于非移动应用程序,DataGrid文档会将您指向ITextLayoutFormat,这就是我在此处链接的内容:

  • (可选)
我想知道嵌入字体是否真的在DataGrid中使用,因为默认渲染器似乎不会使用它们(除非DataGrid指示它)

事实上,您的css将字体嵌入两次(?),我认为您只需嵌入一次即可——通过在DataGrid上适当设置样式:

s|DataGrid {
    font-family:arial_s;
    fontLookup: embeddedCFF;
    renderingMode: cff; 
}

我也遇到过这种情况。我认为您可能需要在MX组件集中使用Flash文本引擎。您可以在编译器选项中执行此操作:


在Flash Builder中,进入项目属性>Flex编译器并选中“在MX组件中使用Flash文本引擎”

在我的例子中,以下设置修复了所有嵌入的字体问题:

  • 在MX组件中使用Flash文本引擎”“签入”项目属性>Flex编译器”

  • 在styles.css中添加以下行:

    global {
        textFieldClass: ClassReference("mx.core.UIFTETextField");
    }
    

  • 谢谢Sunil,我尝试了上面的UITextField以及TextInput和其他一些,但没有任何变化。这里我没有使用库项目,但是数据网格在com.myviews中的一个mxml文件中,但是我尝试使用
    view | DropDownList{…}
    ,它报告相同的警告。嗯,唯一想到的另一件事是尝试清理项目。抱歉,我帮不上忙:)我更新了我的答案,关于嵌入式字体问题,希望能有帮助。感谢Sunil,我假设我必须嵌入两次(一次用于spark,一次用于mx;请参见
    字体系列
    名称不同),但也许有一种方法可以通过在CSS文件中使用样式名称或其他内容来实现这一点,然后引用该样式名来完成embeddedCSF和呈现模式等,所有这些都在CSS文件中。我宁愿在CSS文件中执行一次,而不是在整个应用程序中执行一次。可能在新版本的Flex中,他们可以使用spark全局和mx全局?