Flex中展现html的组件有 mx.controls.Label和mx.controls.TextArea
下面主要介绍下在TextArea中使用html的方式以及限制:
TextArea有htmlText属性。正常情况下我们可以直接将html内容赋值到属性htmlText中就可以显示。
但这种方式不支持样式<style>和脚本<script>标签。如果写在html中,则会在展现的效果中看到这
两个标签。所以我们需要采用另外的方式来达到这种效果。
样式部分:需要将style标签中的样式单独写到一个或多个css样式文件中。如a.css,b.css。
在Flex端采用数据加载的方式(URLLoader或HTTPService或其他方式)加载到css文件内容。
private var styleSheet:StyleSheet; // StyleSheet 类可以创建包含文本格式设置规则
styleSheet = new StyleSheet();
styleSheet.parseCSS(styleText);// 解析一段css内容
htmlArea.styleSheet = styleSheet; //设置TextArea的styleSheet属性。
这里需要注意的是在flex中对加载上来的css文件要求不能有 ui li 这种利用两个或多个规
则的选择器。如果有则相当于没加载整个css。另外Flex对加载上来的css样式中的某些属性
不支持如margin,line-height等等,其他的没有实验所以不确定。再就是在TextArea中支持
的html元素比较少,已知的是不支持input元素。
脚本部分:由于采用TextArea展现的html需要实现超链接功能。所以这里需要在TextArea中可以响应文字
点击事件,而且需要Flex端响应该事件进行处理。
实现代码如下:
//继承TextArea重写onClick方法
protected function onClick(pEvent:MouseEvent):void{
var index:int = textField.getCharIndexAtPoint(pEvent.localX, pEvent.localY);//获取鼠标点击位置
if (index != -1){
var range:TextRange = new TextRange(this, false, index, index + 1);
if (range.url.length > 0){ //url属性用于获取一段超链接如果在range范围内没有超链接内容则length为0
if (!editable){
UITextField(textField).setSelection(index, index + 1);
}
//如下代码为实际应用中规定的实现超链接前缀
var htmlId:String = range.url;
if (htmlId.substr(0, 7) == "htmlId:"){
htmlId = htmlId.substring(7);
}
//发送事件
dispatchEvent(new Event("LOADNEWHTML",true));
if (!editable){
UITextField(textField).setSelection(-1, -1);
}
}
}
}
这里需要注意的是(如果需要在浏览器新开窗口则直接使用href属性跳转就行)。
下面主要介绍下在TextArea中使用html的方式以及限制:
TextArea有htmlText属性。正常情况下我们可以直接将html内容赋值到属性htmlText中就可以显示。
但这种方式不支持样式<style>和脚本<script>标签。如果写在html中,则会在展现的效果中看到这
两个标签。所以我们需要采用另外的方式来达到这种效果。
样式部分:需要将style标签中的样式单独写到一个或多个css样式文件中。如a.css,b.css。
在Flex端采用数据加载的方式(URLLoader或HTTPService或其他方式)加载到css文件内容。
private var styleSheet:StyleSheet; // StyleSheet 类可以创建包含文本格式设置规则
styleSheet = new StyleSheet();
styleSheet.parseCSS(styleText);// 解析一段css内容
htmlArea.styleSheet = styleSheet; //设置TextArea的styleSheet属性。
这里需要注意的是在flex中对加载上来的css文件要求不能有 ui li 这种利用两个或多个规
则的选择器。如果有则相当于没加载整个css。另外Flex对加载上来的css样式中的某些属性
不支持如margin,line-height等等,其他的没有实验所以不确定。再就是在TextArea中支持
的html元素比较少,已知的是不支持input元素。
脚本部分:由于采用TextArea展现的html需要实现超链接功能。所以这里需要在TextArea中可以响应文字
点击事件,而且需要Flex端响应该事件进行处理。
实现代码如下:
//继承TextArea重写onClick方法
protected function onClick(pEvent:MouseEvent):void{
var index:int = textField.getCharIndexAtPoint(pEvent.localX, pEvent.localY);//获取鼠标点击位置
if (index != -1){
var range:TextRange = new TextRange(this, false, index, index + 1);
if (range.url.length > 0){ //url属性用于获取一段超链接如果在range范围内没有超链接内容则length为0
if (!editable){
UITextField(textField).setSelection(index, index + 1);
}
//如下代码为实际应用中规定的实现超链接前缀
var htmlId:String = range.url;
if (htmlId.substr(0, 7) == "htmlId:"){
htmlId = htmlId.substring(7);
}
//发送事件
dispatchEvent(new Event("LOADNEWHTML",true));
if (!editable){
UITextField(textField).setSelection(-1, -1);
}
}
}
}
这里需要注意的是(如果需要在浏览器新开窗口则直接使用href属性跳转就行)。