研究AS3 TextField文本框的一些心得
sshong 发表于2008年8月19日 08:54:00 更新于2009年6月3日 12:55:00
这两天自己做了textinput和textarea组件,众所周知,这两种组件的内部其实都是一个原始的textfield。这里把自己的一些研究心得记录如下

首先要明白几种长度单位:
1、磅:pt(point),这是一种绝对长度单位,为1/72英寸,等于0.3527mm

2、像素:px,这是一种相对长度单位,譬如,WONDOWS的用户所使用的分辨率一般是96像素/英寸。而MAC的用户所使用的分辨率一般是72像素/英寸。

以下讨论文本框TextField相关:

1、字号
也就是fontsize,flash中单位是磅(office中也时),可以使用textHeight和textWidth来获取文本的像素高度和宽度,由于各种字体自身的差别,不是相同字号的字体所需要的文本框高度都一致。譬如Arial字体就比宋体所需要的文本框高度高。

2、文本框高度
对于单行文本框,给定一个高度和一种字体,如何确定所需要的最大的字号呢?
有一个简便方法就是,新建一个autosize的文本框,设置其字号并判断其高度来得到最大字号。
function getFontSizeByTxtHeight(h:Number, font:String):Number
{
  //给定单行文本框高度h,字体font获取最大字号
  var testtxt:TextField = new TextField();
  testtxt.type = TextFieldType.INPUT;
  testtxt.autoSize = TextFieldAutoSize.LEFT;
  for (var size:Number=Math.round(h);size>0; size-=0.5)
  {
    var tf:TextFormat = new TextFormat();
    tf.leading = 0;
    tf.font = font;
    tf.size = size;
    testtxt.defaultTextFormat = tf;
    testtxt.text = "test单行文本";
    //trace(size, testtxt.height);
    if (testtxt.height <= h)
    {
      break;
    }
  }
  return size;
}
3、leading行与行之间的垂直距离
在flash 舞台中新建一个文本框,leading的默认值为2,单位也是磅
而new出来的文本框,leading默认值为0


4、锯齿消除方法
在舞台上可以看到有五种方式:
使用设备字体、位图文本、动画消除锯齿、可读性消除锯齿、自定义消除锯齿。
第一种会查找客户端中该对应字体并进行显示,如果客户端不存在相应的字体,则显示会出现预料外的情况。同时设置此字体的静态文本框会被认为是dynamic类型的textfield,而不是StaticText。
后四种方式需要嵌入字体。同时设置此字体的静态文本框会被认为是StaticText。
而TextField类对应的属性中有
embedFonts:是否使用嵌入字体,false时相当于使用设备字体
antiAliasType:抗锯齿类型flash.text.AntiAliasType.NORMAL、flash.text.AntiAliasType.ADVANCED
gridFitType:网格固定类型
thickness、sharpness对应自定义消除锯齿的粗细、清晰度


5、滚动相关
textfield有scrollV、scrollH、maxScrollV、maxScrollH、bottomScrollV属性来指示相关滚动。
V代表垂直方向,是以行为单位的,如果文本框内显示得下指定行数,则maxScrollV为1,一旦显示不小,maxScrollV就不为1了,所以可以侦听文字的change事件判断maxScrollV来判断是否需要滚动条。scrollV到bottomScrollV之间是当前您能看到的文本框中中的行号。
H代表水平方向,以像素为单位,从0开始,不同于V,同理检测maxScrollH是否为0。

6、事件相关
textfield有如下事件比较常用:
focusin、out:获得、失去焦点,用于判断当前用户是否focus in该文本框,譬如一旦focusin加个高亮边框阿,换个背景什么的
textinput、change:前者在文本输入到文本框之前调用,后者在文本框中的文本发生改变时调用。
scroll:不管你用什么方式导致scrollV、scrollH发生改变,譬如输入文本时的自动滚动阿,滚轮滚动文本阿(即便你手工设置scroll)都会导致scroll事件的发生

7、获取用户系统中可用的字体(利用此可以做一个字体浏览器)
利用flash.text.Font的方法enumerateFonts(enumerateDeviceFonts:Boolean = false)返回字体列表,如果为true包含有swf中的嵌入字体和用户电脑上的设备字体,如果为false则只有swf中的嵌入字体。

import flash.text.Font;

var allFonts:Array = Font.enumerateFonts(true);
allFonts.sortOn("fontName", Array.CASEINSENSITIVE);

var embeddedFonts:Array = Font.enumerateFonts(false);
embeddedFonts.sortOn("fontName", Array.CASEINSENSITIVE);
标签:AS3文本框TextField分类:As3&Flex阅读:16413
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅