`
JavaCrazyer
  • 浏览: 3011974 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Flex4之在button上显示HTML内容

阅读更多

HTMLButton.as

package myas
{
	import flash.events.Event;
	import flash.text.TextLineMetrics;
	import mx.controls.Button;
	import mx.core.UITextField;
	import mx.core.mx_internal;
	use namespace mx_internal;
	
	public class HTMLButton extends Button
	{
		/**
		 *  @private
		 *  Storage for the htmlText property.
		 */
		private var _htmlLabel:String;
		
		/**
		 *  @private
		 *  The value of the unscaledWidth parameter during the most recent
		 *  call to updateDisplayList
		 */
		private var oldUnscaledWidth:Number;
		
		/**
		 *  @private
		 *  This flag indicate htmlText changed for this component
		 */
		private var htmlLabelChanged:Boolean;
		
		/**
		 *  @private
		 *  This flag indicate style changed for this component
		 */         
		private var styleChangedFlag:Boolean = true;
		
		/**
		 *  @private
		 *  This flag indicate tooltip set for this component
		 */
		private var toolTipSet:Boolean = false;
		
		/** 
		 *  @private
		 *  This label setter override for update htmlLabel property with null
		 */
		override public function set label(value:String):void
		{
			super.label = value;
			
			if (super.label != value)
				_htmlLabel = null;
		}
		
		override public function get label():String
		{
			if(isHTML)
				return _htmlLabel;
			return super.label;
		}
		
		[Bindable("htmlLabelChanged")]
		[CollapseWhiteSpace]
		[Inspectable(category="General", defaultValue="")]
		/**
		 *  Specifies the text displayed by the Button control, including HTML markup that
		 *  expresses the styles of that text. 
		 *  When you specify HTML text in this property, you can use the subset of HTML 
		 *  tags that is supported by the Flash TextField control.
		 */
		public function get htmlLabel():String
		{
			return _htmlLabel;
		}
		
		
		/**
		 * @private
		 */
		public function set htmlLabel(value:String):void
		{
			if (_htmlLabel != value)
			{
				_htmlLabel = value;
				
				label = null;
				
				htmlLabelChanged = true;
				
				invalidateSize();
				invalidateDisplayList();
				
				dispatchEvent(new Event("htmlLabelChanged"));
			}
		}
		
		/** 
		 *  @private
		 *  This label setter override for update toolTipSet property for this component
		 */
		override public function set toolTip(value:String):void
		{
			super.toolTip = value;
			
			if (value)
				toolTipSet = true;
			else
				toolTipSet = false;
		}
		
		/**
		 *  @private
		 */
		private function get isHTML():Boolean
		{
			return _htmlLabel != null;
		}
		
		/**
		 *  @private
		 */
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
		{
			super.updateDisplayList(unscaledWidth,unscaledHeight);
			
			// If our width changed, reset the label text to get it to fit.
			if (isHTML && 
				(oldUnscaledWidth > unscaledWidth ||
					textField.htmlText != htmlLabel ||
					htmlLabelChanged||
					styleChangedFlag))
			{
				textField.htmlText = _htmlLabel;
				var lineMetrics:TextLineMetrics= measureHTMLText(_htmlLabel);
				var truncated:Boolean = (lineMetrics.width + UITextField.TEXT_WIDTH_PADDING) > textField.width;
				
				if (!toolTipSet)
				{
					if (truncated)
						super.toolTip = textField.text;
					else
						super.toolTip = null;
				}            
			}
			
			oldUnscaledWidth = unscaledWidth;
			htmlLabelChanged = false;
			styleChangedFlag = false;
		}
		
		/**
		 *  @private
		 *  This function overrited only for update styleChangedFlag
		 */
		override public function styleChanged(styleProp:String):void
		{
			styleChangedFlag = true;
			
			super.styleChanged(styleProp);        
		}
		
		/**
		 * This overrited function return TextLineMetrics based on htmlLabel property.
		 * If htmlLabel is not null, its return TextLineMetrics for htmlLabel.
		 * Otherwiset its return TextLineMetrics for label. 
		 */
		override public function measureText(text:String):TextLineMetrics
		{
			if(isHTML)
				return super.measureHTMLText(text);
			
			return super.measureText(text);
		}
	}
} 

 

HTMLButton.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx"   minWidth="955" minHeight="600" xmlns:myas="myas.*">
	<myas:HTMLButton x="235" y="130">
		<myas:htmlLabel> <![CDATA[Hello<Font color="#FF0000">WorLd</Font>]]></myas:htmlLabel>
	</myas:HTMLButton>
	
</s:Application>

 

效果图

 

 

  • 大小: 993 Bytes
分享到:
评论

相关推荐

    flex重载Button 文本自动换行

    在Flex布局中,Button组件通常用于显示简单的单行文本按钮。然而,在某些场景下,我们可能需要Button的文本内容能够自动换行,以适应不同长度的文本或保持界面的整洁。本文将详细介绍如何重载Flex的Button,实现文本...

    flex button的label字体垂直显示

    在Flex编程中,我们经常会遇到需要自定义组件样式的需求,比如让`Button`的`label`文字垂直显示。这个主题涉及到Flex布局、组件定制以及文本渲染等多个知识点。下面将详细阐述如何实现`Button`的`label`字体垂直显示...

    Flex4创建页面

    ### Flex4创建页面知识点详解 ...通过以上内容的详细介绍,我们可以清晰地理解如何在Flex4中创建页面(状态),并实现页面间的逻辑切换及数据绑定。这对于构建复杂且交互丰富的Flex应用来说是非常重要的。

    flex获得html容器传递的url参数值

    然后,这些参数值会被显示在`dispID`文本组件上。 总的来说,要从HTML容器传递的URL参数值到Flex应用,你需要: 1. 使用`ExternalInterface.call()`调用JavaScript函数获取URL查询字符串。 2. 在JavaScript中处理...

    button自适应高度和自动换行

    `,可以让容器内的按钮在垂直方向上居中,同时根据内容自动调整高度。 2. CSS Grid:CSS Grid布局也提供了高度自适应的解决方案。通过`grid-template-columns: auto;`和`grid-auto-rows: min-content;`,可以创建一...

    flex实现滑动显示隐藏效果

    2. **添加滑动内容**:在容器中添加需要滑动显示的组件,如Button、Label或其他自定义组件。 3. **设置动画**:Flex提供了内置的Animate类来创建动画效果。你可以创建一个Animate对象,指定目标属性(如width或...

    flex

    4. **Flex Component Lifecycle** - 组件的创建、初始化、显示和销毁的过程,理解这个生命周期对于优化性能和处理事件至关重要。 5. **Data Binding** - Flex支持数据绑定,可以自动同步UI组件和模型数据。 6. **...

    Flex4 分页组件

    在Flex4中,分页组件是实现大量数据展示时非常重要的一个功能,它允许用户以较小的数据块浏览内容,提高应用性能和用户体验。 分页组件在Flex4中的实现主要依赖于`mx.controls.Pagination`类。这个类提供了分页控制...

    flex写的计算器

    在计算器应用中,ActionScript代码通常负责计算逻辑,如接收并解析用户输入,执行相应的数学运算,并将结果显示在屏幕上。例如,当用户点击“+”按钮时,对应的ActionScript函数会被调用,它会获取两个操作数并执行...

    Flex 在web中的应用实例

    在本"Flex在Web中的应用实例"中,我们将深入探讨Flex如何在Web环境中实现动态、响应式的用户界面。 一、Flex的基础概念 Flex是一个开源的开发框架,主要由MXML和ActionScript两部分组成。MXML是一种标记语言,用于...

    Flex小知识点

    在Flex中,ImageLoader组件用于加载和显示图像资源。这个组件可以处理网络上的图片,也可以加载本地资源。使用ImageLoader,开发者可以控制加载进度、处理错误以及设置图像的缩放和裁剪方式。ImageLoader与Flex的...

    Flex 放大镜效果

    当鼠标在图像上移动时,根据鼠标的当前位置,更新放大区域的显示位置和内容。 4. **Matrix**:在ActionScript中,Matrix类用于表示二维变换矩阵,如缩放、旋转和平移。在放大镜效果中,我们需要使用Matrix来实现...

    好看的FLEX相册

    4. **组件库**:Flex提供了一套丰富的预定义组件,如Button、Canvas、Image等,可以快速构建用户界面。在相册中,可能使用了List或DataGrid来展示缩略图,以及Image组件显示全尺寸图片。 5. **数据绑定**:Flex支持...

    Html简单实现垂直选项卡移动显示内容

    在CSS部分,我们可以设置样式使选项卡垂直排列,并控制内容区域的显示和隐藏。例如: ```css .tabs { display: flex; flex-direction: column; /* 使选项卡垂直排列 */ } .tabs button { margin-bottom: 10px; ...

    flex在线阅读开发(详细步骤)

    这通常需要借助第三方库或服务来解析文档内容并转换成适合Web显示的格式。 7. **页面渲染**:FlexPaper SDK4可能被用于这个项目,这是一个流行的在线文档查看器,可以嵌入到Flex应用中,提供平滑的翻页效果和良好的...

    自定义Button源码

    本教程将深入探讨如何在Flex框架下自定义Button源码,以便更好地理解和优化你的应用程序界面。 首先,Flex是一种基于ActionScript和MXML的开源框架,用于创建富互联网应用程序(RIA)。它允许开发者构建具有动态...

    flex 翻页效果

    在IT行业中,Flex是一种流行的开发框架,主要用于构建富互联网应用程序(Rich Internet Applications,RIA)。它由Adobe公司开发,提供了一套全面的工具和技术,用于创建动态、交互式的用户界面。在给定的“flex ...

    flex图片查看器源码

    Flex图片查看器源码是一个基于...综上所述,Flex图片查看器源码涉及到Flex框架的多个核心特性,包括UI设计、事件处理、文件操作和图形渲染等。对于学习Flex开发或者需要构建类似应用的人来说,这是一个宝贵的参考资料。

    宽度自适应的按钮。button,方便实用

    自适应按钮是这一设计理念的应用之一,确保按钮无论在桌面、平板还是手机上都能适配屏幕,保持视觉一致性。 2. CSS实现自适应按钮: CSS(层叠样式表)是用于控制网页元素外观的关键工具。实现自适应按钮,可以...

    fle中textarea控件中html文本显示与转换

    通过设置`htmlText`属性,可以在`textarea`控件内显示HTML格式的文本。这种方式非常直观且易于使用,只需在MXML文件中添加相应的代码即可。 #### MXML示例: ```xml &lt;mx:htmlText&gt; 这是HTML文本 &lt;/mx:htmlText&gt;...

Global site tag (gtag.js) - Google Analytics