Flex中TextArea展现html内容

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属性跳转就行)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值