2009-04-14 4 views
0

У меня есть несколько меток в моем приложении Flex, у которых свойство truncateToFit установлено на них равным true. Проблема состоит в том, что вместо отображения «...» в конце любого усеченного текста он отображает нуль.Flex/Actionscript truncateToFit on label component

I.e, если текст моего лейбла был: «Hello Stackoverflow!» Я мог бы ожидать, мой лейбл, чтобы выглядеть следующим образом:

"Привет Stackov ..."

Вместо этого он отображает

"Hello Stackovnull"

Любая помощь будет полезна!

Example of how truncation should look

Edit: - Пример кода:

<mx:HBox width="200" ... > 
    <mx:Label maxWidth="150" truncateToFit="true" text="Really long text.Really long text.Really long text.Really long text.Really long text" /> 
</mx:HBox> 
+0

Пожалуйста, добавьте исходный код в точности так, как он есть (это выглядит одним из тех, что отключены одной ошибкой). Является ли текст ярлыка конкатенацией двух строк? Кроме того, у вас есть 'maxWidth'? – dirkgently

+0

Добавленный код - я уверен, что это не имеет никакого отношения к моему коду. Возможно, это проблема с конфигурацией? –

+0

Предоставлен ли приведенный пример кода на вашей стороне? Прямая копия этого кода работает так же, как и должна. Возможно, более подробно расскажите о своем конкретном сценарии? – nevets1219

ответ

2

Ха-ха! Я нашел решение. Извините, ребята, это, вероятно, было моим недостатком информации, из-за которой вам было сложно отлаживать m :(

Итак, в любом случае - Оказывается, у меня был внешний swf-файл resourceModule, который загрузил мое приложение, чтобы получить локализованные данные языка и т. Д. from - Этот файл не содержит некоторые данные о том, какой текст будет отображаться для усечения (т. е. «...»), и поэтому вместо него отображается «null». Я добавил эти данные в swf ресурсов и все работает как ожидается .

спасибо миллион за то, чтобы помочь мне, ребята;.)

0

Я просто попробовал ваш пример кода, и он работал отлично. Вы уверены, что это не что-то еще?

0

Итак, я пошел и встроил собственный шрифт, и он усекает красиво без какой-либо конкретной проблемы. Я не уверен, как вы вставляете свой шрифт, но этот метод работал для меня. Если вы делаете что-то совершенно иное, то укажите в своем сообщении.

// Cannot name the font as one that already exists! 
[Embed(source="Anonymous.ttf", fontFamily="myAnon")] 
private var fontA : Class; 

[Embed(source="HGRSGU.TTC", fontFamily="myFont")] 
private var fontB : Class; 

//...I have some code here that switches the font 
var obj : Object = truncateMe.getStyle("fontFamily"); 
if (obj == "myAnon") 
    truncateMe.setStyle("fontFamily", "myFont"); 
else 
    truncateMe.setStyle("fontFamily", "myAnon"); 

<!-- My Label --> 
<mx:Label maxWidth="150" truncateToFit="true" id="truncateMe" 
    text="Something really long goes here" fontFamily="myFont" fontSize="20"/> 
+0

Спасибо, что проверили это. Интересно, имеет ли это какое-либо отношение к конкретному шрифту, который я использую? Хотя я знаю, что у него есть полный стоп-символ: s –

+0

Если вы не против совместного использования шрифта, другие могут попытаться выяснить, является ли проблема конкретной для вас или нет, но я точно знаю, что этот метод работает (по крайней мере с этими двумя шрифтами, которые я использую). Вероятно, вы можете обойти проблему, вручную закодировав поведение (я думаю). – nevets1219

0

У меня была огромная борьба с этим вопросом сегодня (3h), что слишком много для маленького вопроса, как это. Во всяком случае, ни одна из приведенных выше советов не решила мою проблему. Я попробовал все это. Я закончил свой собственный класс, который расширяет класс mx.controls.Label. Реализация ниже. Не стесняйтесь использовать его в своих проектах. Обратите внимание, что вы должны отключить truncateToFit в своем mxml при использовании этого. Иначе строка «null» будет добавлена ​​к вашему тексту, и никакое усечение не будет сделано.

Код:

package com.feijk.UI { 
    import mx.controls.Label; 


    /** 
    * An extension for mx.controls.Label to truncate the text and show 
    * a tooltip with the full-length content. This sub-class is meant to be 
    * used when the regular truncateToFit does result in a "null" appendix 
    * on the string instead of the "...". In order for this to work, I used 
    * the following parameters in my mxml: 
    * 
    * - truncateToFit = false 
    * - maxWidth = set 
    * - width = set 
    * 
    * 
    * @author Tomi Niittumäki // Feijk Industries 2010 
    * @NOTE: Feel free to use! :) 
    */ 
    public class FLabel extends Label{ 

     // define the truncation indicator eg. ...(more) etc. 
     private const TRUNCATION_INDICATOR:String = new String("..."); 

     /** 
     * Constructor 
     */ 
     public function FLabel(){ 
      super(); 
     } 

     /** 
     * The overriding method, which forces the textField to truncate 
     * its content with the method truncateToFit(truncationIndicator:String) 
     * and then supers the tooltip to be the original full-length text. 
     */ 
     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 
      //trace("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!: "+textField.text); 
      textField.truncateToFit(TRUNCATION_INDICATOR); 
      super.toolTip = text; 
     } 

    } 
}