flash.text.TextField
gaoshou核心提示:默認的系統TextField提供了對文本最簡單的支持。擴展此類。需要用到很多TextField類提供的方法,可能這些方法已經是大家所熟悉的,而我要講的是這些方法的使用注意事項以及如何使用它來構建自己的擴展。<br /><br />TextField是一位很有實力的選手<br />默認的系統TextField提供了對文本最簡單的支持。擴展此類。需要用到很多TextField類提供的方法,<br />可能這些方法已經是大家所熟悉的,而我要講的是這些方法的使用注意事項以及如何使用它來構建自己的擴展。<br /><br />Adobe出臺了textlayout,因為在FP10的情況下我們已經可以簡單的選擇此框架作為我們的基礎,而某些情況下,<br />例如我只是需要簡單的改善用戶輸入的用戶體驗,因此我并不需要以整套定義放在我的架構中,Yes,我只需要幾個<br />類而已。這個時候TextField就顯得格外的重要。<br /><br />首先要說的是。Why<br />為什么要擴展TextField類呢。<br />通常TextField出現在Label TextInputTextArea 等組件之中可參見Flex的mx.controls包<br />舉例來說Label具有truncateToFit 函數。用于在文字超出顯示邊界的時候只顯示需要的文字并用<br />" ..."來省略看不見的文字。<br />而像我這樣通常使用ActionScript3 Project和Swf library來比賽的選手來說,Adobe所提供的<br />東西就太少了。通常情況下我并不會一次性對一個功能類做非常詳盡的API體系而是將它們<br />預先設計好而并不全部實現,因為我需要他們輕量,并且在完整的前端架構中盡量的用松耦。<br />這樣我就可以經常性的使用它們。不管是做用Flash IDE做Demo也好或者做些較大的應用也好。<br />文字是網路信息的基礎。所以我覺得一個閃閃需要把握好可閱讀性,可操控性,使用舒適性<br />等關系,而不是僅僅限制在精通一門語言。可曾經仔細想過,為什么使用Flash,它又是什么?<br />作為富媒體表現,而傳統媒體呈現又相比弱勢,追求完美,就是這么時刻都存在著。<br /><br />以下首先是對TextField各參數以及方法的詳細說明,此說明比reference要詳盡,請仔細看。<br /><br />alwaysShowSelection : Boolean<br />如果设置为 true 且文本字段没有焦点,Flash Player 将以灰色突出显示文本字段中的所选内容。<br /><br />//這里我并沒有特意要說的<br /><br />antiAliasType : Boolean<br />用于此文本字段的消除锯齿类型。<br /><br />//還記得FlashIDE中的動態文本嗎?下面對文本的控制就有Bitmap text這一下拉項,不過設備字體是沒有此項的。<br />//此屬性通常用于指定高級的文本顯示方式 要慎用 。如果當前的文本沒有綁定字體,那么不要打開這個屬性。<br />//而當你綁定了字體,這個字體可是嵌入的或者是以Class方式載入的都成,一旦在綁定字體的同時使用這個屬性<br />//可以清晰的顯示文本光滑的邊界增強可讀性,當然,如果沒有被包含在綁定字體的內的文本使用了此屬性就無法使用了<br /><br />autoSize : String<br />控制文本字段的自动大小调整和对齐。<br /><br />//此方法非常有用,如果你需要寫一個類似Java中的pack方法 (自動大小)<br />//或者類似getPreferredSize(獲得最佳尺寸)就需要用到這個屬性<br />//一般情況下我們都會將它設定成flash.text.TextFieldAutoSize.LEFT<br />//設置完成之后,設置此文本的寬度,高度也會相應的發生變化以容納全部文字<br /><br />background : Boolean<br />指定文本字段是否具有背景填充。<br /><br />backgroundColor : uint<br />文本字段背景的颜色。 <br /><br />border : Boolean<br />指定文本字段是否具有边框。<br /><br />borderColor : uint<br />文本字段边框的颜色。<br /><br />//我推薦通常情況都不要打開背景和邊框,因為你就有更大的空間可以自己創建背景和邊框<br />//一般在測試的時候我會打開這個選項,因為需要清楚看到顯示區邊界<br /><br /><br />bottomScrollV : int<br />[只读 (read-only)] 一个整数(从 1 开始的索引),指示指定文本字段中当前可以看到的最后一行。<br /><br />//這個沒什么好說的,它已經說清楚了<br /><br />caretIndex : int<br />[只读 (read-only)] 插入点(尖号)位置的索引。 <br /><br />//這個屬性是只讀所以比較煩,如果要重寫一個TextField的行為我們需要可以根據坐標來得到光標位置<br /><br /><br />condenseWhite : Boolean<br />一个布尔值,指定是否删除具有 HTML 文本的文本字段中的额外空白(空格、换行符等等)。<br /><br />//這個沒什么好說的<br />//如果你要進行高級的識別可以類似這樣<br />/**<br />* 所有不可见字符除了回车和治表符和空格符 一般用于消除除空格以外的不可见字符<br />*/<br />public static const INVISIBLE_CHARACTERS_EXCEPT_ENTER_TABLE_SPACE:RegExp = <br />new RegExp ( "u0001|u0002|u0003|u0004|u0005|u0006|u0007|u0008"+<br />"|u000B|u000C|u000E|u000F|u0010|u0011|u0012|u0013|u0014|u0015"+<br />"|u0016|u0017|u0018|u0019|u001A|u001B|u001C|u001D|u001E|u001F", "g" );<br /><br />defaultTextFormat : TextFormat<br />指定应用于新插入文本(例如,用户输入的文本或使用 replaceSelectedText() 方法插入的文本)的格式。<br /><br />//不要嘗試這樣改變默認文本字體 like new TextField ().defaultTextFormat.size = 12;<br />//而應該用這樣的方式取代new TextField ().defaultTextFormat = new TextFormat ( ... );<br />這里提供一個全部文本格式替換的方法<br />/**<br />* 應用字體<br />* @f 字體<br />* @overwriteDefault 應用字體并覆蓋默認字體<br />*/<br />public function applyTextFormat ( f:TextFormat , overwriteDefault:Boolean = false ):void {<br /> if ( length > 0 ) {<br /> super.setTextFormat( f , 0 , length );<br /> }<br /> if ( overwriteDefault ) {<br /> defaultTextFormat = f;<br /> }<br />}<br /><br />displayAsPassword : Boolean<br />指定文本字段是否是密码文本字段。<br /><br />//如果你想把這些密碼的"*"改陳你喜歡的貓貓狗狗之類的,可以這樣做。<br />//override掉這個方法 并指定此TextField的type屬性為TextFieldType.DYNAMIC也就是不可輸入<br />//然后對每次文本輸入的時候使用KeyboardEvent監聽,并緩存用戶當前輸入的文字。<br />//最后用別的Shape或者BitmapData繪制出來就可以了。具體到每個小貓貓狗狗圖標可以使用<br />//getCharBoundaries來獲得或者直接采用流式布局就OK了。本文由网页教学网(webjx.com)发布!转载和采集的话请不要去掉!谢谢。<br />//雖然這樣說,但是基本上沒什么需要用到這樣的方式顯示。可能拿來泡MM有用吧。。。。。<br /><br /><br />embedFonts : Boolean<br />指定是否使用嵌入字体轮廓进行呈现。 <br /><br />//沒什么好說的。<br /><br />gridFitType : String<br />用于此文本字段的网格固定类型。<br /><br />//這個用到的幾率不大畢竟不是在做代碼編輯器對那么好干嘛。<br /><br />htmlText : String<br />包含文本字段内容的 HTML 表示形式。<br /><br />//這個我從來不使用,因為類似圖片我用分層實現,而<font>我就用setTextFormat代替了<br />//因為有時要改變htmlText里的格式總是要重新設定這個值比較麻煩。<br /><br />length : int<br />[只读 (read-only)] 文本字段中的字符数。<br /><br /> maxChars : int<br />文本字段中最多可包含的字符数(即用户输入的字符数)。 <br />//不說了<br /><br />maxScrollH : int<br />[只读 (read-only)] scrollH 的最大值。<br /><br />maxScrollV : int<br />[只读 (read-only)] scrollV 的最大值。<br /><br />//很常用,做聊天的時候比如 QQ 要一直滾動在最下面并且在字符超出限制范圍的時候要刪掉很前面的內容再滾動到最下面<br /><br />multiline : Boolean<br />指示字段是否为多行文本字段。<br /><br />//雖然這個值是true應該為SingleLine right?<br />//但是只是說當此文本為輸入文本不可輸入回車而設置text中帶有"n"還是會換行的<br />//而且我推薦如果真的需要多行的時候把wordWrap打開畢竟只向下滾動要方便的多。<br />//如果認為此multiline不精確,直接覆蓋此方法,對set text ( value:String )<br />//使用 value.replace ( INVISIBLE_CHARACTERS_EXCEPT_ENTER_TABLE_SPACE , '' );<br /><br /><br />numLines : int<br />[只读 (read-only)] 定义多行文本字段中的文本行数。<br /><br />//很好用<br /><br />restrict : String<br />指示用户可输入到文本字段中的字符集。 <br /><br />//限定輸入范圍,一般在密碼框框中使用<br /><br /><br />scrollH : int<br />当前水平滚动位置。<br /><br />scrollV : int<br />文本在文本字段中的垂直位置。<br /><br />//這兩個屬性單位并不一樣請注意<br />//scrollH指的是文本橫向滾動的坐標范圍<br />//而scrollV值得是文本滾動的行數,留心觀察TextField從來不會出現第一行只看到一半吧。<br />//當第一行可見的時候scrollV為1,不是0,他是說滾動到第幾行,不是滾動到第幾行的下標值<br /><br />selectable : Boolean<br />一个布尔值,指示文本字段是否可选。<br /><br />//類似Label這樣的文字一般還是不可選的。<br /><br />selectionBeginIndex : int<br />[只读 (read-only)] 当前所选内容中第一个字符从零开始的字符索引值。 <br /><br />selectionEndIndex : int<br />[只读 (read-only)] 当前所选内容中最后一个字符从零开始的字符索引值。<br /><br />//沒什么好說的<br /><br />sharpness : Number<br />此文本字段中字型边缘的清晰度。 <br /><br />//沒什么好說的<br /><br /><br />styleSheet : StyleSheet<br />将样式表附加到文本字段。<br /><br />//并不推薦使用 因為使用起來并不方便<br /><br /><br />text : String<br />作为文本字段中当前文本的字符串。<br /><br />//值得注意到是當對文本進行大小重設的時候里面的狀態不會一時間改變<br />//比如getLineMetrics的結果,一個簡單的刷新辦法是text = text<br />//文本重新設定一次可以有效的刷新文字顯示并額外增加一點開銷本信息代表文章来源网页教学webjx.com请大家去www.webjx.com浏览!<br /><br />textColor : uint<br />文本字段中文本的颜色(采用十六进制格式)。<br /><br />//很實用的直接改變所有文字顏色的屬性<br /><br />textHeight : Number<br />[只读 (read-only)] 文本的高度,以像素为单位。<br /><br />textWidth : Number<br />[只读 (read-only)] 文本的寬度,以像素为单位。<br /><br />//這個也不是很精確使用textWidth不是我所期望的一行的全部寬度而是可見范圍內的寬度<br />//比如100寬度的TextField無法容納100個字符時候這個結果范圍的值在100左右而實際文本<br />//可能有300像素寬度,可是使用getLineMetrics ( ... ).width , height代替<br /><br />thickness : Number<br />此文本字段中字型边缘的粗细。 <br /><br />//沒什么好說的<br /><br /><br />type : String<br />文本字段的类型。<br /><br />//用于指定此文本是否是輸入文本。或者是一般的動態文本<br /><br />useRichTextClipboard : Boolean<br />指定在复制和粘贴文本时是否同时复制和粘贴其格式。<br /><br />//不經常用到<br /><br />wordWrap : Boolean<br />一个布尔值,指示文本字段是否自动换行。<br /><br />//非單行的文本都推薦使用<br /><br />函數部分<br /><br /><br />appendText (newText:String):void<br />将 newText 参数指定的字符串追加到文本字段的文本的末尾。<br /><br />//效率比 "+=" 高的追加文本<br /><br /><br />getCharBoundaries (charIndex:int):Rectangle<br />返回一个矩形,该矩形是字符的边框。<br /><br /><br />//當提供字符位于不可見字符位置或者超出有效字符下標范圍返回null<br /><br /><br />getCharIndexAtPoint (x:Number, y:Number):int<br />在 x 和 y 参数指定的位置返回从零开始的字符索引值。<br /><br />//核心函數之一 不過此方法因為考慮到效率的問題。所以常常為null<br />//道理很簡單 減少非可見文本緩存開銷<br />//常常出現null的情況有以下幾種<br />//1.提供索引超出0到length之間<br />//2.提供索引位于不可見字符位置<br />//3.提供索引位于上下左右各1-2像素位置時 系統有默認的邊界<br />//4.位于文本末尾EOF處<br />//5.位于一行末尾而未到達寬度的空白處<br />//6.換行符或者其他不可見字符<br />//<br />//通常替換解決途徑<br />//1.超出字符索引的,按照交集處理,糾正到有效字符范圍以內<br />//2.設置scrollV scrollH屬性計算求出應該滾動到位置以使此字符可見然后取得邊界<br />//3.當位于像素邊界內的時候進行位置修補 x < 2則x = 2 > width則 = width - 3 高度同理<br />//4.位于EOF處以及回車統一處理辦法為設置text時候使用正則匹配到所有不可見字符然后<br />//累計行高(通過getLineMetrics().height得到)取得<br />//5.位于空白處并且此行長度非1則跳轉到下面一行行首(getLineOffset得到)<br /><br />getFirstCharInParagraph (charIndex:int):int<br />如果给定一个字符索引,则返回同一段落中第一个字符的索引。<br /><br />getImageReference (id:String)isplayObject<br />返回给定 id 或已使用 <img> 标签添加到 HTML 格式文本字段中的图像或 SWF 文件的 DisplayObject 引用。<br /><br />//很少用<br /><br />getLineIndexAtPoint (charIndex:int):int<br />在 x 和 y 参数指定的位置返回从零开始的行索引值。<br /><br />//情況同getCharBoundaries一行容易出現null的情況,建議盡量減少使用坐標方式的返回<br /><br />getLineIndexOfChar (charIndex:int):int<br />返回 charIndex 参数指定的字符所在的行的索引值(从零开始)。<br /><br />//非常實用,只要charIndex位于有效的字符范圍內此結果都穩固可靠本文由网页教学网webjx.com整理发布!转载请注明出处,谢谢!<br />//得到這個值就知道該滾動到哪一行了<br /><br />getLineLength (lineIndex:int):int<br />返回特定文本行中的字符数。<br /><br />//返回一行文本的長度。不過要注意到是包含了回車符所以通常最后一個下標的字符邊界是無法直接得到的<br /><br />getLineMetrics (lineIndex:int):TextLineMetrics<br />返回给定文本行的度量信息。<br /><br />//非常有用的方法,很穩定,只要提供的行下標位于 0 - numLines-1范圍內都可以得到當前行的<br />//邊界信息,其中包含了此行實際內容的寬度和高度遺憾的是并沒有包含行的y坐標<br />//所以通常都可以用累計的方式將每一行的y坐標緩存起來這樣當需要光標所在位置的字符而又無法<br />//返回有效邊界的時候可以使用緩存中的y坐標進行判斷和糾正<br /><br />getLineOffset (lineIndex:int):int<br />返回 lineIndex 参数指定的行中第一个字符的字符索引。<br /><br />//得到行首字符的坐標,很管用<br /><br />getLineText (lineIndex:int):String<br />返回 lineIndex 参数指定的行的文本。<br /><br />//返回當前行的文本,如果末尾有回車也包含在內<br /><br />getParagraphLength (lineIndex:int):int<br />如果给定一个字符索引,则返回包含给定字符的段落的长度。<br /><br />//不常用<br /><br />setTextFormat (format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void<br />将 format 参数指定的文本格式应用于文本字段中的指定文本。<br /><br />//建議每次對部分文本進行文本格式設置時使用緩存存儲 這3個參數 這樣可以方便在刷新的<br />//時候利用這些內容重新給予格式而不是全盤被替換掉。<br />//當然需要注意到地方中文文本特別是大的文本使用格式設置很耗費計算<br /><br /><blockquote class="blockquote">From: http://www.photoep.cn/read.php?tid=113Powered by PHPWind.com</blockquote>
页:
[1]