我可以像这样更改字体的颜色
LabelStyle style1 = new LabelStyle(..some font...,
Color.valueOf("FF4500")
);
label.setStyle(style1);
但如何更改背景? 现在,背景与在
中设置的整个屏幕的背景相同渲染方法lke this
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(
1.000f, 0.980f, 0.941f
,1);
答案 0 :(得分:8)
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&#39;背景Drawable。
这是我能够提出的最简单的解决方法,坦率地说,Label类中没有setBackground()是愚蠢的。
实际上,最简单的修复方法可能是破解Label类并为其添加setBackground()方法。
[编辑]完成后,请务必处理Pixmaps;即labelColor.dispose();
[更新] @Mitrakov Artem提出了一个很好的观点:上述解决方案将影响此LabelStyle的所有实例。如果这不是您想要的,您可以创建一个新的LabelStyle,在其上使用上面的方法,然后将其保存到Label。引用Artem:&#34;所以我建议创建一个新样式(LabelStyle style = new LabelStyle(label.getStyle());),更改其背景然后将其应用于标签(label.setStyle(style); )&#34;
答案 1 :(得分:3)
实际上你不会像那样改变Lable的背景。你刚刚改变了clearcolour。猜猜你知道。
要更改背景,您需要更改标签样式的背景。为此,我建议使用简单的NinePatch
作为背景,(可以是正方形!如果它的白色,你可以改变九个色块的颜色和背景颜色的变化!)
NinePatch temp = new NinePatch(new Texture(....), 10, 10, 10, 10); //edges
有关ninepatch的更多信息,请查看here libgdx wiki ninepatch
您需要将该九个补丁添加到Skin objekt。例如像这样
Skin skin = new Skin();
skin.add("background",temp)
之后,您可以从皮肤中获取可以设置为LabelStyle
背景的绘图。
style1.background = skin.getDrawable("background");
您也可以使用简单的位图,但这会缩放到标签大小,这会导致大多数情况下变形。 Ninepatch可以缩放而不会变形。
答案 2 :(得分: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);
}
};
}