7

我可以像这样改变字体的颜色

LabelStyle style1 = new LabelStyle(..some font..., 
                Color.valueOf("FF4500")
                );
label.setStyle(style1);

但是如何更改背景?现在背景与设置的整个屏幕的背景相同

像这样的渲染方法

Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glClearColor(
            1.000f, 0.980f, 0.941f

            ,1);
4

3 回答 3

11
Label label = new Label(labelText, skin);
Pixmap labelColor = new Pixmap(labelWidth, labelHeight, Pixmap.Format.RGB888);
labelColor.setColor(<your-color-goes-here>);
labelColor.fill();
label.getStyle().background = new Image(new Texture(labelColor)).getDrawable();

基本上,使用 Image 类的 getDrawable() 函数来分配 Label 的 LabelStyles 背景 Drawable 的颜色。

这是我能想到的最简单的解决方法,坦率地说,在 Label 类中没有 setBackground() 实在是太愚蠢了。

实际上,也许最简单的解决方法是破解 Label 类并为其添加一个 setBackground() 方法。

[编辑] 使用完像素图后,请务必处理它们;即 labelColor.dispose();

[更新] @Mitrakov Artem 提出了一个很好的观点:上述解决方案将影响此 LabelStyle 的所有实例。如果这不是您想要的,您可以创建一个新的 LabelStyle,在其上使用上述方法,然后将其保存到 Label。引用 Artem:“所以我建议创建一个新样式 (LabelStyle style = new LabelStyle(label.getStyle());),更改其背景,然后将其应用于标签 (label.setStyle(style);)”

于 2016-08-10T19:09:05.197 回答
3

实际上你不会像那样改变标签的背景。你只是改变了clearcolor。猜你知道。

要更改背景,您需要更改标签样式的背景。为此,我建议使用简单NinePatch的背景,(可以是正方形!如果它是白色的,您可以更改 Ninepatch 的颜色并且背景颜色会更改!)

NinePatch temp = new NinePatch(new Texture(....), 10, 10, 10, 10); //edges

有关 Ninepatch 的更多信息,请查看此处 libgdx wiki Ninepatch

需要将该 Ninepatch 添加到 Skin 对象中。例如像这样

Skin skin = new Skin();
skin.add("background",temp)

之后,您可以从皮肤中获得一个可绘制对象,您可以将其设置为LabelStyle.

style1.background = skin.getDrawable("background");

请参阅libgdx API 标签样式

您也可以使用简单的位图,但它确实会缩放到标签大小,这在大多数情况下会导致变形。Ninepatch 可以在没有变形的情况下缩放。

于 2013-08-10T22:04:34.663 回答
1

如果您需要快速简便的解决方案,可以使用下面的代码段。它不适用于多行文本,因为它没有考虑每行的文本宽度。无论如何,背景会自动调整为标签小部件的宽度和高度(即,如果您的文本发生更改)。

private Label label = new Label("text", createLabelStyleWithBackground());

private LabelStyle createLabelStyleWithBackground() {
    LabelStyle labelStyle = new LabelStyle();
    labelStyle.font = new BitmapFont();
    labelStyle.fontColor = Color.WHITE;
    labelStyle.background = createBackground();
    return labelStyle;
}

private Drawable createBackground() {
    Pixmap labelColor = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
    Color color = new Color(Color.GRAY);
    color.a = 0.75f;
    labelColor.setColor(color);
    labelColor.fill();

    Texture texture = new Texture(labelColor);

    return new BaseDrawable() {

        @Override
        public void draw(Batch batch, float x, float y, float width, float height) {
            GlyphLayout layout = label.getGlyphLayout();
            x = label.getX();
            y = label.getY() - (layout.height + 15) / 2; // +15 is some space 
            batch.draw(texture, x, y, layout.width, layout.height + 15);
        }
    };
}

这是一个带有多行标签的示例

于 2019-08-27T21:41:53.373 回答