2012-05-16 31 views
8

Tôi muốn tạo thành văn bản spark di động thành phần bọc tất cả nội dung của mình. Tôi phát hiện ra cách thức mx_internal làm điều này nhưng tôi không thể gọi mx_internal :: getTextField() numLines phương pháp - không có như vậy ... Bất kỳ ai đã làm điều này trước đây?Tự động hóa thành phần văn bản spark Mobile spark

+0

Nếu bạn tìm thấy một cách để làm điều đó; nhưng nó không hoạt động Tôi nghĩ bạn sẽ phải chia sẻ một số mã để chúng tôi có thể chẩn đoán tại sao nó không hoạt động. – JeffryHouser

+0

Tôi đã cố gắng chỉ định heightInLine = {NaN} - hoạt động trong các phiên bản trước nhưng không hoạt động trong 4.6. Và một cách khác mà tôi đã thử là tạo ra làn da mới mà không cần cuộn nhưng IDE đã cho tôi một lỗi mà nó không thể tìm thấy cuộn trong định nghĩa. Vì vậy, tôi yêu cầu cho bất kỳ đề nghị khác? –

+0

Đó có thể là do 4.6 sử dụng StageText thay vì Flash TextField. Trong 4.6 nếu bạn trở lại giao diện cũ, tôi đặt cược nó sẽ hoạt động. Tôi không có thời gian để tìm kiếm các tên da cụ thể, nhưng tôi nghĩ rằng tôi đã viết về nó trên Blog Flextras gần đây. – JeffryHouser

Trả lời

3

Dưới đây là một giải pháp dành cho di động:

for(var i:int=0; i < StyleableTextField(txt_genel.textDisplay).numLines; i++) { 
     ta_height += StyleableTextField(txt_genel.textDisplay).getLineMetrics(i).height; 
} 
txt_genel.height = ta_height; 
0

Đây là giải pháp có ít lớp TextArea tùy chỉnh, có ý kiến ​​để giải thích thêm một chút.

package 
{ 
    import mx.events.FlexEvent; 

import spark.components.TextArea; 
import spark.components.supportClasses.StyleableStageText; 
import spark.events.TextOperationEvent; 

public class CustomTextArea extends TextArea 
{ 

    private var _lineNumber:int = 1; 
    private var _padding:int; 
    private var _minHeight:int; 

    public function CustomTextArea() 
    { 
     super(); 

     addEventListener(FlexEvent.CREATION_COMPLETE, function setBehaviour(event:FlexEvent):void 
     { 
      //minHeight to prevent textarea to be too small 
      _minHeight = height; 
      //padding between textarea and text component inside to calculate line number 
      _padding = ((textDisplay as StyleableStageText).x - x) + (width - (textDisplay as StyleableStageText).width); 
      //listener for text changing 
      addEventListener(TextOperationEvent.CHANGE, setHeight); 
     }); 
    } 

    private function setHeight(event:TextOperationEvent):void 
    { 
     //line number is textwidth divided by component width 
     _lineNumber = (((textDisplay as StyleableStageText).measureText(text).width + _lineNumber * _padding)/width) + 1; 
     //text height is line number * text height 
     var newHeight:int = _lineNumber * (textDisplay as StyleableStageText).measureText(text).height; 
     //if new height > min height, set height 
     if (newHeight > _minHeight) 
      height = newHeight; 
    } 
} 
} 

Hy vọng điều này sẽ hữu ích.

EDIT: Với một số lượng lớn các dòng, chiều cao của TextArea tăng quá nhiều. Nên được quản lý.

+0

nó ném một ngoại lệ tại dòng _padding = ((textDisplay as StyleableStageText) .x - x) + (width - (textDisplay as StyleableStageText) .width); ngoại lệ là: "Không thể truy cập thuộc tính hoặc phương thức của tham chiếu đối tượng null". –

+0

Đây là cách tôi sử dụng nó trong mxml:

+0

Và một kịch bản hành động mà tôi gán một văn bản với nó: StyleableTextField (txt_genel.textDisplay). htmlText = ozet ['genelbilgiler'] dưới dạng Chuỗi; –

Các vấn đề liên quan