2010-03-01 11 views
1

Est-ce que quelqu'un pourrait savoir pourquoi le code suivant a pour résultat que la première étiquette est plus large que la seconde? La première boîte (texte plus court) mesure 21 pixels de largeur, la seconde boîte 19 pixels.Problème de mise en page Flex - Label: un texte plus court signifie une étiquette plus large

<mx:VBox> 
    <mx:HBox id="lbl1" backgroundColor="#6789ad"> 
     <mx:Label fontWeight="bold" color="white" text="0" /> 
    </mx:HBox> 
    <mx:HBox id="lbl3" backgroundColor="#6789ad"> 
     <mx:Label fontWeight="bold" color="white" text="12" /> 
    </mx:HBox> 
</mx:VBox> 

Je l'ai couru sur Flex 3.4 et Flex 3.5. Même chose mais différent avec Flex 4, première case 20 pixels, seconde 19 encore.

Vive Tom

+0

Quelle police utilisez-vous? –

+0

La police par défaut. – Tom

Répondre

4

Le coupable peut être la fonction getMinimumText dans mx.controls.Label --essentially il applique une largeur minimale de 2 caractères sur les étiquettes (en particulier , mesure toutes les étiquettes de caractères 0 ou 1 comme si elles contenaient "Wj"). Pour voir si c'est le cas, essayez de remplacer votre "12" texte par "Wj" et voir si elles sortent de la même taille.

getMinimumText est remplacée dans SliderLabel pour faire au minimum 1 caractère ("W") à la place. Je suppose qu'il fait cela pour permettre le centrage des étiquettes de 1 caractère (sur les graduations du curseur). C'est tout ce que SliderLabel fait, donc vous pourriez juste l'utiliser à la place.

+0

Super! Spot sur, à votre santé! Une seule remarque: Si vous voulez utiliser SliderLabel de MXML, vous devez ajouter un espace de noms XML pour ce package: . Vous pouvez ensuite l'ajouter à votre application en utilisant Tom

+0

Si vous utilisez htmlText, getMinimumText n'est pas appliqué de la même manière (il mesure réellement le texte) mais Label ajoute encore 5 pixels de plus à la largeur. Dans AS3, voir Label.as:1483 – beerbajay

1

Si vous ne définissez pas une largeur sur un conteneur, il va seulement être aussi grand que le contenu ont besoin d'être. Essayer de définir une largeur sur chacun des conteneurs HBox - explicite, comme dans width="50", ou en pourcentage, comme dans width="100%". Un pourcentage de largeur fera le HBox remplir la largeur du parent VBox.

<mx:VBox> 
    <mx:HBox id="lbl1" backgroundColor="#6789ad" width="50"> 
     <mx:Label fontWeight="bold" color="white" text="0" /> 
    </mx:HBox> 
    <mx:HBox id="lbl3" backgroundColor="#6789ad" width-"50"> 
     <mx:Label fontWeight="bold" color="white" text="12" /> 
    </mx:HBox> 
</mx:VBox> 

ou

<mx:VBox width="50"> 
    <mx:HBox id="lbl1" backgroundColor="#6789ad" width="100%"> 
     <mx:Label fontWeight="bold" color="white" text="0" /> 
    </mx:HBox> 
    <mx:HBox id="lbl3" backgroundColor="#6789ad" width="100%"> 
     <mx:Label fontWeight="bold" color="white" text="12" /> 
    </mx:HBox> 
</mx:VBox> 

Donnez un coup de feu ....

+0

Salut, merci pour votre réponse. Dans mon application, j'ai effectivement une boîte avec une largeur définie contenant l'étiquette, où l'étiquette est centrée horizontalement à l'intérieur de la boîte. Cependant, en raison de la mise en page amusante de l'étiquette, l'étiquette ne montre pas centré pour les étiquettes à un seul chiffre. – Tom

+0

Pas de problème. Je suis content que tu aies trouvé une réponse! –