Flex自定义布局在我的Android平板电脑上表现不同

时间:2013-03-14 11:15:18

标签: android flex air

无法找到previous problem的解决方案,我决定使用自定义布局实现自己的软键盘。我想要为键盘做的是能够顺利地适应各种不同的屏幕尺寸。因此,当键与屏幕的边界重叠时,整条线都会分开并整齐定位。

一切都按计划进行。我重写了updateDisplayList()以重新定位元素  和measure()以确定正确的尺寸,因此当我们在垂直组中定位时,我的布局会相应地拉伸它。

我在平板电脑上安装应用程序时会出现问题。定位都错了。尺寸看起来应该是应有的三倍。

我在 SANSUI ETAB 801VP (AIR 3.6.0.585,Android 4.0.4)上测试应用

以下是定位代码:

override public function updateDisplayList(width : Number, height : Number):void
    {
        var x : Number = 0, y : Number = 0;

        for (var i : uint = 0; i < target.numElements; i++) {
            var element : ILayoutElement = target.getElementAt(i);

            element.setLayoutBoundsSize(NaN, NaN);

            var dx : Number = x + element.getLayoutBoundsWidth() + _gap;

            if (dx >= target.parent.width) {
                i = Math.floor(i / 2);
                x = dx = 0;
                y += getMaxHeight(0, i) + _gap;
            }

            element.setLayoutBoundsPosition(x, y);

            x = dx;
        }
    }

测量:

override public function measure():void
    {
        var indent : Number = 0, height : Number = 0;

        var next : uint = 0;

        for (var i : uint = 0; i < target.numElements; i++) {
            var element : ILayoutElement = target.getElementAt(i);

            element.setLayoutBoundsSize(NaN, NaN);

            var dx : Number = indent + element.getLayoutBoundsWidth() + _gap;

            if (dx >= target.parent.width) {
                height += getMaxHeight(next, i) + _gap;

                next = 0;
            }

            indent = dx;
        }

        height += height == 0
            ? getMaxHeight()
            : getMaxHeight(next);

        target.measuredWidth  = target.parent.width;
        target.measuredHeight = height;
    }

getMaxHeight()迭代指定范围的元素,计算最大高度:

private function getMaxHeight(startIndex : uint = 0, endIndex : uint = 0x7fffffff):Number
    {
        endIndex = Math.min(target.numElements, endIndex);

        var height : Number = 0;

        for (var i : uint = 0; i < endIndex; i++) {
            var element : IVisualElement = target.getElementAt(i);

            element.setLayoutBoundsSize(NaN, NaN);

            height = Math.max(element.height, height);
        }

        return height;
    }

我在这里遗漏了什么吗?在我的FlashDevelop中,该平台设置为AIR Mobile 3.1。我是否应该尝试在计算机上安装AIR 3.6以满足我在平板电脑上获得的结果?

0 个答案:

没有答案