starling feathersui按钮主题没有显示

时间:2013-09-12 12:23:00

标签: flash starling-framework

我只是想和椋鸟和羽毛一起去试图让羽毛主题起作用。

我已经设法得到它,所以应用程序的背景颜色更改为主题颜色(所以我知道主题正在加载并正确运行)但是按钮或我尝试过的任何其他控制器上没有任何内容。按钮只是纯黑色文字,没有按钮。

package {
import starling.display.Sprite;
import starling.display.Stage;
import starling.display.Image;
import starling.textures.Texture;
import starling.events.Event;
import starling.text.TextField;

import feathers.controls.Button;
import feathers.controls.Callout;
import feathers.controls.Label;
import feathers.controls.TextInput;

import feathers.themes.MetalWorksMobileTheme



public class Game extends Sprite
{




public function Game()
{


    this.addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );

var stageWidth = 640;
    var stageHeight=960;






var button:Button = new Button();
button.label = "Click Me";

button.x = 200;
button.y = 500;
addChild( button );

}


private function addedToStageHandler( event:Event ):void
{
new feathers.themes.MetalWorksMobileTheme();
}   


}

 }

我在.source设置中添加了主题的路径。

我必须遗漏一些阻止它加载的东西,任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:0)

我认为你缺少对主题对象的阶段引用。您需要这样做,以便主题可以正确连接DisplayListWatcher。

以下是您的主题应该如何的摘要:

public class Theme extends DisplayListWatcher {

    public function Theme(container:DisplayObjectContainer = null, scaleToDPI:Boolean = true) {

        if (!container) {
            container = Starling.current.stage;
        }
        super(container);
        Starling.current.nativeStage.color = BACKGROUND_COLOR;
        if (root.stage) {
            root.stage.color = BACKGROUND_COLOR;
        } else {
            root.addEventListener(Event.ADDED_TO_STAGE, root_addedToStageHandler);
        }

        _scaleToDPI = scaleToDPI;
        initialize();
    }

protected function initialize():void {
    const scaledDPI:int = DeviceCapabilities.dpi / Starling.contentScaleFactor;
    if (_scaleToDPI) {
        if (DeviceCapabilities.isTablet(Starling.current.nativeStage)) {
            _originalDPI = ORIGINAL_DPI_IPAD_RETINA;
        } else {
            _originalDPI = ORIGINAL_DPI_IPHONE_RETINA;
        }
    } else {
        _originalDPI = scaledDPI;
    }
    scale = scaledDPI / _originalDPI;

    if (DeviceCapabilities.isTablet(Starling.current.nativeStage)) fontSize = 40 * scale;
    else fontSize = 36 * scale;

    // init your texture and stuff

    setInitializerForClass(Button, buttonInitializer); // call your button initializer
}

protected static function buttonInitializer(button:Button):void {
        const skinSelector:Scale9ImageStateValueSelector = new Scale9ImageStateValueSelector();
        skinSelector.defaultValue = buttonUpSkinTextures;
        skinSelector.defaultSelectedValue = buttonDownSkinTextures;
        skinSelector.setValueForState(buttonDownSkinTextures, Button.STATE_DOWN, false);
        skinSelector.setValueForState(buttonDisabledSkinTextures, Button.STATE_DISABLED, false);
        skinSelector.imageProperties = {
            width: 66 * scale,
            height: 66 * scale,
            textureScale: scale
        };
        button.stateToSkinFunction = skinSelector.updateValue;

        button.defaultLabelProperties.textFormat = new TextFormat(FontUtils.getFontName("bold"), fontSize * 0.9, COLOR_WHITE);
        button.defaultSelectedLabelProperties.textFormat = new TextFormat(FontUtils.getFontName("bold"), fontSize * 0.9, COLOR_DARK_GREY);
        button.downLabelProperties.textFormat = new TextFormat(FontUtils.getFontName("bold"), fontSize * 0.9, COLOR_DARK_GREY);

        button.paddingTop = button.paddingBottom = 5 * scale;
        button.paddingLeft = button.paddingRight = 10 * scale;
        button.gap = 12 * scale;
        button.minWidth = button.minHeight = 66 * scale;
        button.minTouchWidth = button.minTouchHeight = 88 * scale;
    }
}

答案 1 :(得分:0)

我遇到了同样的问题,花了一些时间来解决这个问题,但如果你想一想就不那么困难了。

您需要做的是将主题目录添加到 source starling文件夹中。

因此,如果您设置了此文件夹:

下载/羽毛-1.1.1 /文档

下载/羽毛-1.1.1 /实例

...

下载/羽毛-1.1.1 /源

下载/羽毛-1.1.1 / SWC

下载/羽毛-1.1.1 /主题

首先,您必须将源文件夹添加到ActionScript构建路径中。然后转到

下载/羽毛-1.1.1 /主题/ MetalWorksMobileTheme /源极/羽毛/主题

并将该文件夹复制到此位置

下载/羽毛-1.1.1 /源/羽

新主题现在位于正确的文件夹中,Flash Builder将知道在哪里找到它。

执行此操作后,您可能会遇到一些错误,因为主题引用了一些未找到的资产(字体和图像)。你会在这里找到那些:

下载/羽毛-1.1.1 /主题/ MetalWorksMobileTheme /资产

将该文件夹复制到您的项目位置,或者只是编辑主题文件中的路径,一切都应该没问题。

另外我认为您应该在ADDED_TO_STAGE事件处理程序中添加所有按钮创建代码,如下所示:

public function Game()
{
    this.addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );

    var stageWidth  : int = 640;
    var stageHeight : int = 960;
}


private function addedToStageHandler( event:Event ):void
{
    new feathers.themes.MetalWorksMobileTheme();

    var button:Button = new Button();
    button.label = "Click Me";

    button.x = 200;
    button.y = 500;

    addChild( button );
} 

希望这有帮助

答案 2 :(得分:0)

在创建Button而不是在构造函数中之后,您应该将MetalWorksMobileTheme添加为子项。在创建主题之前添加到舞台的组件不会被主题蒙皮。