有没有办法让可变宽度字体像HTML中的固定宽度字体一样?
例如,如果我有一个句子,"快速的灰色狐狸跳过懒惰的狗",显示在"Courier New"中,一个固定宽度的字体,它会比它是一个可变宽度字体,如"Arial"更宽. ".我想使用"Arial"而不是"Courier New"但是字符固定宽度.
可变宽度的例子:
快速灰狐狸跳过懒狗.
固定宽度示例:
The quick grey fox jumped over the lazy dog
请注意每个示例中单词"quick"和"gray"中的字符彼此之间的距离.
我最近将一些项目迁移到了闪亮的新Flex 4.6 SDK.我并没有期待太多麻烦,因为它只是一个小小的释放.但事实上,我到处都收到了数百个错误.这些错误主要来自Spark SkinnableComponent
; 例如:
override protected function getCurrentSkinState():String {
return mySkinPart.someProperty ? "normal" : "someOtherState";
}
Run Code Online (Sandbox Code Playgroud)
会在4.5下工作得很好,但会nullpointer
在4.6中给我一个错误.原因很简单:在getCurrentSkinState()
创建skinpart之前调用4.6 ,而在4.5中我可以确定处于默认状态的skinpart会在那里.
进一步的调查让我相信Skin的初始状态现在undefined
而不是States
数组中的第一个状态(直到它调用getCurrentSkinState()
它为止).
解决这些问题通常非常简单,而且需要我的防守编程.但这不是我真正的问题.
真正的问题是,如果组件的生命周期发生了变化,我想知道到底是什么改变了我的项目的哪些部分可能会受到影响.
如果有人能够对此有所了解或者至少将我指向正确的地方,我可以阅读所有相关信息,我将非常感激(因为我能找到的唯一发行说明仅涵盖新的移动组件).
编辑(这不会改变问题;我只是想与你分享我的发现)
我遇到的另一个问题是:dynamic
修饰符似乎不再被子类继承.这是一个纯粹的ActionScript问题,所以我猜这是编译器以不同的方式对待它.
让我解释.考虑这个课程:
public class MyClass extends Array { }
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试将新项目推送到此自定义数组中,如下所示:
var t:Array = new MyClass();
t.push("hello");
Run Code Online (Sandbox Code Playgroud)
显然这是因为Array是动态的而MyClass不是,所以它很容易修复:
public dynamic class MyClass extends Array { }
Run Code Online (Sandbox Code Playgroud)
并且错误消失了.
但是,如果我使用的第三方库具有这样的代码并且我没有源代码访问权限呢?我的应用程序会破坏,我无法修复它.我的意思是:来吧,点发布并没有什么小变化.
我有一个组件库.它有一个清单文件,如下所示:
<?xml version="1.0"?>
<componentPackage>
<component id="AutoComplete" class="be.edge.components.AutoComplete" />
<!-- more components left out for brevity -->
</componentPackage>
Run Code Online (Sandbox Code Playgroud)
我使用这些编译器设置通过FlashBuilder编译库:
当我在其他FlashBuilder项目中使用编译库时,一切都按预期工作.我得到代码完成,当我从代码完成中选择一个建议时,命名空间属性会自动添加到组件中,如下所示:
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:ns="library://ns.edge.be" >
<ns:AutoComplete />
</s:Skin>
Run Code Online (Sandbox Code Playgroud)
但是: FlashBuilder会自动创建前缀'ns'.我想将其定制为'e'.如何使FlashBuilder默认使用此自定义前缀?
我有两个原因:
编辑:
我还将config.xml传递给编译器,该编译器具有与命名空间相关的以下声明:
<compiler>
<namespaces>
<namespace>
<uri>library://ns.edge.be</uri>
<manifest>manifest.xml</manifest>
</namespace>
</namespaces>
</compiler>
<include-namespaces>
<uri>library://ns.edge.be</uri>
</include-namespaces>
Run Code Online (Sandbox Code Playgroud) 在较大的程序中,我给出了以下(flex/bison)
在flex中:
pn [\+|\-]
dig [0-9]+
exp [e|E]{dig}+
Run Code Online (Sandbox Code Playgroud)
.
.
.
"+" {printf("+ detected\n");
return PLUS_SIGN;}
{pn}?{dig}+ { printf("digit detected - %s\n",yytext);
sscanf(yytext, "%d", (int*)&yylval);
return TYPE_INT;}
Run Code Online (Sandbox Code Playgroud)
在野牛:
expr:
expr PLUS_SIGN expr
{
$$ = $1 + $3;
printf(" $$=%f\n",$$);
}
| TYPE_INT
{
$$ = (int)$1;
printf(" $$=%f\n",$$);
}
;
Run Code Online (Sandbox Code Playgroud)
问题是:
当我给2 + 2时,它识别2和+2而不是2,+,2
我怎么能让它做这个添加?
apache-flex ×2
bison ×1
c ×1
calculator ×1
components ×1
css ×1
flex-spark ×1
html ×1
lex ×1
lifecycle ×1
manifest ×1
namespaces ×1
parsing ×1
typography ×1