Pergunta

Eu tenho vários rótulos no meu aplicativo Flex, que possuem a propriedade "truncatetofit" definida como true. O problema é que, em vez de exibir '...' no final de qualquer texto truncado, ele exibe nulo.

Ou seja, se o texto da minha gravadora era: "Olá Stackoverflow!" Eu posso esperar que minha gravadora seja assim:

"Olá Stackov ..."

Em vez disso, exibe

"Olá Stackovnull"

Qualquer ajuda seria util!

Exemplo de como o truncamento deve parecer

Editar: - Exemplo Código:

<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>
Foi útil?

Solução

Ha ha! Eu encontrei a solução. Desculpe pessoal - provavelmente foi minha falta de informação que dificultava vocês depurar para M :(

Então, de qualquer maneira - acontece que eu tinha um SWF de recursos externos que meu aplicativo carregou para obter dados de idiomas localizados etc. - Este arquivo não incluiu alguns dados sobre qual texto exibir para o truncamento (ou seja, '...') E assim ele exibiu 'nulo'. Eu adicionei esses dados ao SWF de recursos e tudo está funcionando como esperado.

Obrigado um milhão por tentar me ajudar, pessoal. ;)

Outras dicas

O problema é que um dos pacotes de recursos flexíveis padrão não está incluído em seus arquivos de localização compilados. Veja aqui a explicação detalhada e a correção:http://deniszgonjanin.posterous.com/flex-truncation-null-error-fix

Acabei de experimentar o seu código de exemplo e funcionou bem. Tem certeza de que não é outra coisa?

Então, eu fui incorporado uma fonte própria e ela trunca muito bem sem nenhum problema em particular. Não tenho certeza de como você está incorporando sua fonte, mas esse método funcionou para mim. Se você estiver fazendo algo completamente diferente, especifique em sua postagem.

// 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"/>

Se estiver trabalhando com vários locais, adicione 'en_us' à sua localização local. Por exemplo: ResourceManager.localechain = ['PT_BR', 'en_us'];

Solução encontrada em: http://blog.flexexamples.com/2008/01/26/truncating-text-in-the-flex-label-control-using-the-truncatetofit-property/

Procure a postagem de Leandro

Hoje tive uma luta enorme com esse problema (3h), o que é demais para um pequeno problema como esse. De qualquer forma, nenhuma das dicas acima resolveu meu problema. Eu tentei tudo. Acabei fazendo minha própria aula, o que estende o mx.controls.Label classe. A implementação está abaixo. Sinta -se à vontade para usá -lo em seus projetos. Observe que você deve desativar o truncatetofit no seu MXML ao usar este. Caso contrário, a string "nula" será anexada ao seu texto e nenhum truncamento será feito.

Código:

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;
        }

    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top