Java 如何更改libgdx标签中背景的颜色?

Java 如何更改libgdx标签中背景的颜色?,java,android,libgdx,Java,Android,Libgdx,我可以像这样改变字体的颜色 LabelStyle style1 = new LabelStyle(..some font..., Color.valueOf("FF4500") ); label.setStyle(style1); Skin skin = new Skin(); skin.add("background",temp) 但是我如何改变背景呢? 现在背景与在中设置的整个屏幕的背景相同 渲染方法lke此 Gdx.gl

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

LabelStyle style1 = new LabelStyle(..some font..., 
                Color.valueOf("FF4500")
                );
label.setStyle(style1);
Skin skin = new Skin();
skin.add("background",temp)
但是我如何改变背景呢? 现在背景与在中设置的整个屏幕的背景相同

渲染方法lke此

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

            ,1);

实际上你不会像那样改变标签的背景。你刚换了透明的颜色。我想你知道

要更改背景,需要更改标签样式处的背景。为此,我建议使用一个简单的
NinePatch
作为背景(可以是正方形!如果它是白色,你可以改变NinePatch的颜色,背景颜色也会改变!)

有关ninepatch的更多信息,请查看

需要将该NineMatch添加到皮肤对象中。比如像这样

LabelStyle style1 = new LabelStyle(..some font..., 
                Color.valueOf("FF4500")
                );
label.setStyle(style1);
Skin skin = new Skin();
skin.add("background",temp)
之后,您可以从皮肤上获得一个可绘制的图像,可以将其设置为
标签样式的背景

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

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

标签标签=新标签(标签文本,蒙皮);
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();
Pixmap labelColor=新的Pixmap(labelWidth、labelHeight、Pixmap.Format.RGB888); labelColor.setColor(); labelColor.fill(); label.getStyle().background=新图像(新纹理(labelColor)).getDrawable();
基本上,使用Image类的getDrawable()函数来指定标签的LabelStyles背景可绘制的颜色

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

实际上,最简单的修复方法可能是破解Label类并向其添加setBackground()方法

[编辑]使用完Pixmaps后,请确保将其处理掉;i、 e.labelColor.dispose()


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

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


我不能只设置背景色吗?它会改变文本的颜色,这就是为什么我问你不能那样改变背景,因为它没有任何背景。您需要先添加,然后才能更改它。正如我所说的,如果你使用白色纹理,你可以将其颜色更改为你所使用的每一种颜色。简而言之,不能直接更改或设置标签的背景色。直接是指直接将背景a设置为特定颜色,如labelStyle.background=color.BLACK;非常好的解决方案,但实际上更改了LabelStyle实例的外观。这意味着具有相同样式的所有其他标签都将受到影响。因此,我建议创建一个新样式(
LabelStyle style=newlabelstyle(label.getStyle());
),更改其背景,然后将其应用于标签(
label.setStyle(style);
)@MitrakovArtem-我认为这是一个很大的改进。