我在Flex中有一个组件,并且该组件的一部分是一个标签。有没有办法自动调整字体大小以适应其容器?Adobe Flex - 自动更改字体大小以适应其容器的任何方式?
1
A
回答
1
不自动(至少不是我所知道的),没有设置某种事件处理程序,并对发生某些事件采取行动。以下是一个演示一种方法简单的AIR应用程序 - 在这种情况下,调整大小事件触发标签的fontSize的变化:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="this_creationComplete()">
<mx:Script>
<![CDATA[
import mx.binding.utils.BindingUtils;
import mx.binding.utils.ChangeWatcher;
[Bindable]
public var myValue:int = 0;
private function this_creationComplete():void
{
setSize();
addEventListener(Event.RESIZE, handleResize);
}
private function handleResize(event:Event):void
{
setSize();
}
private function setSize():void
{
lbl.setStyle("fontSize", this.height/2);
}
]]>
</mx:Script>
<mx:Label id="lbl" text="Hello, world!" />
</mx:WindowedApplication>
这里,当应用进行了调整,标签的fontStyle属性,都会改变应用程序高度的一半;扩大和缩小它,你会看到它是如何工作的。与往常一样,其他方法当然也有其他方法,但由于我们正在处理样式而不是可绑定属性,所以最有可能需要一点自定义编码。希望能帮助到你!
0
如果您的意思是单行标签,那么这是可以帮助您的组件。考虑到它只能缩小字体大小(作为对容器宽度缩减的反应)。
import flash.events.Event;
import flash.text.TextLineMetrics;
import mx.controls.Label;
import mx.events.FlexEvent;
public class ElasticLabel extends Label {
private static const EXTRA_SPACE:Number = 2;
private static const MIN_FONT_SIZE:Number = 6;
private var fontResizeRequired:Boolean = false;
public function ElasticLabel() {
super();
addEventListener("explicitMaxWidthChanged", triggerFontResize);
addEventListener(FlexEvent.VALUE_COMMIT, triggerFontResize);
}
private function triggerFontResize(event:Event):void {
fontResizeRequired = true;
}
private function get currentWidth():Number {
var textMetrics:TextLineMetrics = measureText(text);
var textWidth:Number = textMetrics.width;
var paddings:Number = 0;
var paddingLeft:Number = getStyle("paddingLeft");
if (!isNaN(paddingLeft)) paddings += paddingLeft;
var paddingRight:Number = getStyle("paddingRight");
if (!isNaN(paddingRight)) paddings += paddingRight;
return textWidth + paddings + EXTRA_SPACE;
}
private function resizeFont():void {
if (!isNaN(maxWidth) && maxWidth > 0) {
var fontSize:Number = getStyle("fontSize") as Number;
while (maxWidth < currentWidth
&& fontSize > MIN_FONT_SIZE) {
fontSize -= 0.5;
setStyle("fontSize", fontSize);
}
}
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (fontResizeRequired) {
resizeFont();
fontResizeRequired = false;
}
}
}
相关问题
- 1. Adobe Flex - LinkBar字体大小似乎没有改变!
- 2. 如何在Flex中更改HBox的大小以适应其容器?
- 3. 如何动态更改字体大小以便始终适合其父容器
- 4. 自动调整字体大小以适应容器
- 5. 自动缩放字体大小以适应容器
- 6. Adobe Flex的unicodeRange
- 7. Adobe Flex arraycollection
- 8. Adobe ExtendScript更改笔刷大小
- 9. 动态改变字体大小以适应内容量
- 10. 如何动态更改Flex应用程序的字体大小?
- 11. 更改NSTextField字体大小以适合
- 12. 响应字体大小 - 适合容器
- 13. Adobe Flex Charting SDK
- 14. 自动更改主体字体大小
- 15. Adobe Flex日期
- 16. Adobe Flex DeepLinking
- 17. Adobe flex layout redraw
- 18. 在整个应用程序中更改字体大小或主题 - Adobe Flex/AIR
- 19. Adobe Flex RichTextEditor
- 20. 如何自动调整图像大小以适应div容器
- 21. C#调整大小的字体,以适应容器
- 22. Adobe Flex日志API
- 23. Adobe Flex Datagrid:addEventListener MouseEvent.CLICK
- 24. 自动更改字体大小
- 25. Adobe Flex key capture
- 26. Flex:更改容器大小以包装内容
- 27. Adobe Flex应用程序中的sFIR字体
- 28. Adobe flex上传文件的最大大小
- 29. 以编程方式更改默认字体大小(样式)
- 30. Adobe Flex的内容提供程序