0

Flex Mobileでは、アクションバーにいくつかのボタンがあります。画面が非常に小さいデバイス(HTC Wildfireなど)では、すべてのボタンを表示できるわけではありません。要素が収まらないときに要素を非表示にするようにFlexに指示する方法はありますか?状態を使用して画面の幅をテストすることで可能であることはわかっていますが、別の方法があることを願っています。

4

2 に答える 2

1

これは、オブジェクトを水平にレイアウトし、収まらないアイテムをすべて削除する、非常に単純な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レイアウトクラスのすべての機能を備えたレイアウトを作成するのは簡単ではありません。ただし、上記のような簡単なことを実行して、子オブジェクトを反復処理し、サイズ/位置を設定できます。この場合、収まらないものをわざわざレンダリングする必要はありません。

于 2012-04-13T03:44:51.837 に答える
1

ApplicationDPI値を確認できます。より高い解像度で露骨なものを隠します。ほとんどのタブレットは160dpiを提供します。ほとんどの電話は240dpiを提供します。iPhone4は320dpiの画面を提供します。iPadのRetinaディスプレイ画面についてはよくわかりません。

于 2012-04-13T04:39:08.103 に答える