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

时间:2012-05-23 17:26:32

标签: actionscript-3 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;
    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;
}

Q1:我在上面的行中收到了s | DropDownList:

的警告

The CSS type selector 'spark.components.DropDownList' was not processed, because the type was not used in the application.

但它在应用程序中使用,并且在此处更改其值会产生影响。知道为什么我会收到这个警告吗?

Q2:当我在调试模式下运行应用程序时,我收到警告:

warning: incompatible embedded font 'arial_s' specified for mx.core::UITextFormat. This component requires that the embedded font be declared with embedAsCFF=false.

警告即将发生,因为我已将global属性用于上面的spark组件,这会导致它应用于所有组件,包括一些mx组件。这里感兴趣的组件是DataGrid单元格中的文本。我只需要弄清楚如何单独定义mx.core :: UITextFormat的样式。知道这个语法是什么意思吗?我试过了:

mx|UITextFormat {
    font-family:arial_mx;
}  

但它不起作用。不知道该怎么办。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UITextFormat.html

3 个答案:

答案 0 :(得分:2)

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; 
}

答案 1 :(得分:0)

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

在Flash Builder中,转到项目属性&gt; Flex编译器并检查&#34;在MX组件中使用Flash文本引擎&#34;。

答案 2 :(得分:0)

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

  1. 在MX组件中使用Flash文本引擎”选中“项目属性&gt; Flex编译器

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

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