将一个ButtonStyle用于多个Button [Libgdx Scene2d]

时间:2016-10-14 13:32:46

标签: libgdx scene2d

我正在使用Libgdx Scene2d创建一个界面,我有多个按钮都需要不同的样式,这意味着我必须为每个按钮创建一个buttonStyle?

        btnStyle = new TextButton.TextButtonStyle();
        btnStyle.up = btnSkin.getDrawable("boxBtn");
        btnStyle.checked = btnSkin.getDrawable("boxBtn1");

        btnBox = new Button(btnStyle);

        anotherButton = new Button(newStyle?) //this is what I mean

1 个答案:

答案 0 :(得分:0)

你的想法是正确的。对于需要不同样式的每个按钮,您需要使用不同的TextButtonStyle

TextButtonStyle styleOne = new TextButtonStyle();
styleOne.up = ...someDrawable1

TextButtonStyle styleTwo = new TextButtonStyle();
styleTwo.up = ...someDrawable2

TextButton button1 = new TextButton("Button1", styleOne);
TextButton button2 = new TextButton("Button2", styleTwo);

如果您发现一遍又一遍地使用相同的样式集,则可以创建static样式并将其用于按钮。

public class Styles {
    public static final TextButtonStyle styleOne = new TextButtonStyle();
    public static final TextButtonStyle styleTwo = new TextButtonStyle();

    public static void initStyles() {
         styleOne.up = ...

         styleTwo.up = ....
    }
}

然后在加载资产时致电Styles.initStyles()

如果你想自定义每个样式,但仍然使用一组默认样式属性,你可以尝试这样的事情:

public class Styles {

    public static TextButtonStyle createTextButtonStyle(Drawable up, Drawable down) {
        TextButtonStyle style = new TextButtonStyle();
        style.up = up;
        style.down = down;
        style.font = Assets.getDefaultFont() //For example
        style.fontColor = Assets.getDefaultFontColor() //For example
    }
}

然后,当您想要创建一个按钮时,您可以这样做:

TextButton button = new TextButton("Text", Styles.createTextButtonStyle(drawable1, drawable2));

希望这有助于澄清一些事情。