मैं अपने मोबाइल चिंगारी पाठ क्षेत्र घटक बनाने के लिए सभी सामग्री को रैप करने के लिए चाहते हैं। मुझे यह करने का mx_internal तरीका पता चला है, लेकिन मैं mx_internal :: getTextField() को कॉल करने में सक्षम नहीं हूं। NumLines विधि - ऐसा कोई नहीं है ... कोई भी जिसने पहले ऐसा किया है?स्वत: आकार बदलना फ्लेक्स मोबाइल चिंगारी पाठ क्षेत्र घटक
उत्तर
यहां मोबाइल के लिए एक समाधान है:
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;
यहां छोटे कस्टम टेक्स्ट एरिया क्लास के साथ एक समाधान है, और कुछ और व्याख्या करने के लिए टिप्पणियां हैं।
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;
}
}
}
आशा है कि इससे मदद मिलेगी।
संपादित करें: बड़ी संख्या में लाइनों के साथ, टेक्स्टअरे की ऊंचाई बहुत बढ़ रही है। प्रबंधन किया जाना चाहिए।
यह लाइन _padding = ((StyleDStplay के रूप में textDStplay) के रूप में एक अपवाद फेंकता है .x - x) + (चौड़ाई - (स्टाइलबलस्टेजटेक्स्ट के रूप में टेक्स्ट डिस्प्ले)। विड्थ); अपवाद है: "किसी संपत्ति या शून्य ऑब्जेक्ट संदर्भ की विधि तक नहीं पहुंच सकता है।" –
यहाँ कैसे मैं MXML में उपयोग है: <घटक: CustomTextArea आईडी = "txt_genel" चौड़ाई = "100%" skinClass = "spark.skins.mobile.TextAreaSkin" \t \t \t \t \t \t \t \t textAlign = "बाएँ" FontFamily = "_ टाइपराइटर" contentBackgroundAlpha = "0" \t \t \t \t \t \t \t \t borderVisible = "false" संपादन योग्य = "false" /> –
और एक कार्रवाई स्क्रिप्ट जहाँ मैं इसे करने के लिए एक पाठ में निर्दिष्ट करें: StyleableTextField (txt_genel.textDisplay)। HTMLText = ozet ['genelbilgiler'] स्ट्रिंग के रूप में; –
आप यह करने के लिए एक रास्ता मिल गया है; लेकिन यह काम नहीं करता है मुझे लगता है कि आपको कुछ कोड साझा करना होगा ताकि हम निदान कर सकें कि यह क्यों काम नहीं करता है। – JeffryHouser
मैंने heightInLine = {NaN} असाइन करने का प्रयास किया - जो पिछले संस्करणों में काम करता है लेकिन 4.6 में नहीं। और मैंने कोशिश की एक और तरीका स्क्रॉल के बिना नई त्वचा बना रहा था लेकिन आईडीई ने मुझे एक त्रुटि दी कि इसे परिभाषा में स्क्रॉलर नहीं मिल सका। तो मैं किसी अन्य सुझाव के लिए पूछ रहा हूँ? –
शायद ऐसा इसलिए है क्योंकि 4.6 फ्लैश टेक्स्टफ़िल्ल्ड के बजाय स्टेजटेक्स्ट का उपयोग करता है। 4.6 में यदि आप पुरानी खाल पर वापस आते हैं, तो मुझे लगता है कि यह काम करेगा। मेरे पास विशिष्ट त्वचा के नाम देखने के लिए समय नहीं है, लेकिन मुझे लगता है कि मैंने हाल ही में फ्लेक्स्ट्रास ब्लॉग पर इसके बारे में लिखा था। – JeffryHouser