Динамический размер шрифта Flex 4 для изменения размера при изменении размера окна / панели - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть пользовательский компонент BorderContainer, в котором есть текст.Если бы я добавил это в свое основное приложение внутри панели, BorderContainer выходит за границы ширины панели, поскольку текст имеет заданный размер.У меня все его компоненты в процентах, так что он изменяет размеры при сокращении, но одна часть, которая содержит флажки и метки (много вещей с текстом), испортилась, так как размер шрифта не меняется.

Я весьма уверен, что результаты, которые я ищу, могут быть достигнуты путем встраивания шрифта, хотя я не смог найти решение из Интернета.Я пытаюсь сделать это с помощью стиля CSS, так как я буду использовать его для множества различных компонентов (я не хочу просто изменять это непосредственно в гибком коде).

РЕДАКТИРОВАТЬ Решение:

Я пытался использовать соотношение, как предлагал www0z0k, но оно вызывало некоторые серьезные проблемы, когда оно быстро изменялось или уменьшалосьscreen (компонент не будет корректно изменен в размерах, потому что он умножается на соотношение. Наконец, мне показалось, что он не сработал и не вызвал проблем, это то, что я запустил код и обнаружил width (1152) и height (842) контейнера.

Затем я создал переменную const widthX = 1152 и heightY = 842, а в функции onResize () я закодировал изменение размера следующим образом:
(где bottomGroup - id borderContainer, который я пытаюсь изменить размер)

bottomGroup.scaleX = width / widthX;;
bottomGroup.scaleY = height / heightY;

END EDIT

До сих пор я нашел несколько примеров встраивания шрифтов в <fx:Style> и попыталсяудалить любое замедление fontSize, но это, похоже, не работает.

</p> <pre><code><fx:Style> @namespace s "library://ns.adobe.com/flex/spark"; @font-face { src: url("fonts\Arial.ttf"); fontFamily: myFontFamily; color: black; fontStyle: normal; fontWeight: normal; advancedAntiAliasing: false; } s|BorderContainer { fontFamily: myFontFamily; } </fx:Style>

Если у кого-то есть какие-либо предложения или знают, куда я идунеправильно, любая помощь будет оценена. Спасибо.

РЕДАКТИРОВАТЬ: образец приложения, в котором отображается моя проблема.
CustomContainer.mxml </p> <pre><code><?xml version="1.0" encoding="utf-8"?> <s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <s:HGroup> <s:Label text="This is a label" /> <s:Label text="Here is another which add up to take up quite a bit of horizontal space" /> <s:Label text="Here is another which add up to take up quite a bit of horizontal space" /> <s:Label text="Here is another which add up to take up quite a bit of horizontal space" /> </s:HGroup>

Main.mxml
</p> <pre><code><?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:local="*" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Style> @namespace s "library://ns.adobe.com/flex/spark"; @font-face { src: url("fonts\Arial.ttf"); fontFamily: myFontFamily; color: black; fontStyle: normal; fontWeight: normal; advancedAntiAliasing: false; } s|BorderContainer { fontFamily: myFontFamily; } </fx:Style> <s:Panel title="BorderContainer Component Example" width="75%" height="75%" horizontalCenter="0" verticalCenter="0"> <local:container> </local:container> </s:Panel>

Я хотел бы иметь возможность изменить размер шрифта для размещения на панели.Я не мог предоставить реальный код, над которым я работаю, но этот пример, надеюсь, поможет понять идею.

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

должно быть возможно изменить размер шрифта аналогичным образом, но imho, если у вас есть что-то кроме текста (вы отметили флажки), вы должны использовать следующее:

<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" resize="onResize();">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<fx:Script>
    <![CDATA[

    private function onResize():void{
        var ratio:Number = width / measuredWidth;
        contentHolder.scaleX *= ratio;
        contentHolder.scaleY *= ratio;
    }

    ]]>
</fx:Script>

<s:HGroup id="contentHolder">
    <s:Label text="This is a label" />
    <s:Label text="Here is another which add up to take up quite a bit of horizontal space" />
    <s:Label text="Here is another which add up to take up quite a bit of horizontal space" />
    <s:Label text="Here is another which add up to take up quite a bit of horizontal space" />
</s:HGroup>
</s:BorderContainer>

Main.xml не нуждается в изменении

0 голосов
/ 12 февраля 2011

Если вы задаете явную ширину (например, 100%) для своих меток в BorderContainer, они должны автоматически делать переносы строк (см .: Документы для меток ).

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

...