当太大时,Flex drop元素

时间:2012-04-13 02:04:44

标签: actionscript-3 flex layout mobile

在Flex Mobile中,我在操作栏中有几个按钮。在屏幕非常小的设备(例如HTC Wildfire)上,并非所有按钮都能显示。有没有办法告诉Flex在不合适时隐藏元素?我知道通过使用状态和测试屏幕的宽度是可能的,但我希望还有另一种方式..

2 个答案:

答案 0 :(得分:2)

这是一个非常简单的 Spark布局类,它可以水平放置对象,删除任何不适合的项目。

package
{
    import mx.core.ILayoutElement;

    import spark.layouts.supportClasses.LayoutBase;

    public class DroppableHorizontalLayout extends LayoutBase
    {
        private static const PADDING:Number = 5;

        public function DroppableHorizontalLayout()
        {
            super();
        }

        override public function updateDisplayList(width:Number, height:Number):void
        {
//          super.updateDisplayList(width,height); // super method doesn't do anything
            var currentXCoordinate:Number = 0;
            var numKids:int = target.numChildren;
            for (var i:int=0; i < numKids; i++)
            {
                var currentItem:ILayoutElement = target.getElementAt(i);
                var itemWidth:Number = currentItem.getPreferredBoundsWidth();
                if (currentXCoordinate + itemWidth < width)
                {
                    currentItem.setLayoutBoundsSize(itemWidth, currentItem.getPreferredBoundsHeight());
                    currentItem.setLayoutBoundsPosition(currentXCoordinate, 0); // or whatever the Y coordinate should be
                    currentXCoordinate = currentXCoordinate + itemWidth + PADDING;
                }
                else
                {
                    break; // no reason to keep iterating, nothing else will fit...
                }
            }
        }
    }
}

编写具有典型Flex布局类的所有功能的布局并非易事。但是你可以做上面这样简单的事情,迭代子对象,设置它们的大小/位置,在这种情况下,不要费心去渲染那些不合适的东西。

答案 1 :(得分:1)

您可以检查ApplicationDPI值;在更高的分辨率上隐藏明确的东西。大多数平板电脑提供160dpi;而大多数手机提供240dpi。 iPhone 4提供320dpi的屏幕。我不确定iPad Retina显示屏。