Как установить ширину метки внутри itemrenderer для списка свечей в жидкостном макете? - PullRequest
2 голосов
/ 30 июня 2011

В моем гибком проекте, который рассчитан на 100% масштабирования до веб-окна, у меня есть список искр.И у меня есть простой itemrenderer, который берет данные и отображает имя и сообщение.Просто подумайте об этом, как о простом дисплее мгновенных сообщений.Проблема заключается в том, что для моей метки msg_txt я хочу задать ей ширину, равную ширине родительского списка, в котором она хранится.

Я попытался отключить horizontalScrollPolicy, также попробовал width = "{this.parent.parent.width} "(а также this.parent.width) для метки зажигания внутри средства визуализации элементов.

и на этикетке я попробовал некоторые вещи, такие как left = "0" right = "0" maxWidth = "{this.width}", но на самом деле ничего не помогает.

Как я могусделать так, чтобы у этой метки была максимальная ширина списка, в котором он содержится, и убедиться, что он меняет размер, если размер браузера меняется, а размер списка меняется?

Вот список:

<s:List id="chat_content" width="100%" height="100%"
                alternatingItemColors="[#EEEEEE,#E6E6E6]" contentBackgroundColor="#EEEEEE"
                horizontalScrollPolicy="off" itemRenderer="renderers.ActiveChatItemRenderer">
        </s:List>

вот торговец предметами:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Script>
        <![CDATA[
            import mx.core.FlexGlobals;
            import mx.events.FlexEvent;

            import spark.components.List;

            override public function set data(value:Object):void {
                super.data = value;
                if (data == null)
                    return;

                if(data.systemMsg)
                {

                }
                if(data.name)
                {
                    name_label.text=data.name;
                }
                if(data.icon)
                {

                }
                if(data.msg)
                {
                    msg_txt.text=data.msg;
                }




            }





        ]]>
    </fx:Script>

    <s:states>
        <s:State name="normal" />
        <s:State name="hovered" />
        <s:State name="selected" />
    </s:states>

    <s:HGroup id="container" horizontalAlign="left" verticalAlign="top" paddingTop="10" paddingBottom="10">
        <s:VGroup horizontalAlign="center" verticalAlign="middle"
                  width="100">
            <s:Label id="name_label" fontWeight="bold" text="Name: "
                     fontSize="18"/>
        </s:VGroup>
        <s:Label id="msg_txt" text="msg text here" width="{this.parent.parent.width}"/>


    </s:HGroup>

</s:ItemRenderer>

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Пробовали ли вы с процентШирина и процентВысота программно после создания itemRenderer (creationComplete)?

или

У меня нетпопробовал следующее:

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:s="library://ns.adobe.com/flex/spark" width="100%" height="100%">
0 голосов
/ 30 июня 2011

Установить свойства ширины в процентах для дочерних элементов itemRenderer:

<s:HGroup id="container" horizontalAlign="left" verticalAlign="top" paddingTop="10" paddingBottom="10" width="100%">
    <s:VGroup horizontalAlign="center" verticalAlign="middle"
              width="100">
        <s:Label id="name_label" fontWeight="bold" text="Name: "
                 fontSize="18"  width="100%"/>
    </s:VGroup>
    <s:Label id="msg_txt" text="msg text here" width="{this.parent.parent.width}"  width="100%"/>
</s:HGroup>

Мне неясно, какой макет вы собираетесь использовать.Поскольку у вас есть только две метки в коде;зачем тебе две группы?Если вы хотите отобразить два элемента рядом, вы можете использовать что-то вроде этого:

<s:Label id="name_label" fontWeight="bold" text="Name: " fontSize="18"  width="100" x="0" y="0"/>
<s:Label id="msg_txt" text="msg text here" width="{this.parent.parent.width}"  width="100%" x="{name_label.x + name_label.width}" y="0"/>

Что, я подозреваю, даст вам похожий макет без использования дополнительных групп.

...