我只是想和椋鸟和羽毛一起去试图让羽毛主题起作用。
我已经设法得到它,所以应用程序的背景颜色更改为主题颜色(所以我知道主题正在加载并正确运行)但是按钮或我尝试过的任何其他控制器上没有任何内容。按钮只是纯黑色文字,没有按钮。
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设置中添加了主题的路径。
我必须遗漏一些阻止它加载的东西,任何帮助都会受到赞赏。
答案 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
添加为子项。在创建主题之前添加到舞台的组件不会被主题蒙皮。