引出
最近使用 dialog 时,发现设置 dialog 的窗口固定大小无效问题。
public static Dialog showOkDialog(Stage stage, String title, String text, Skin skin) {
final Dialog dialog = new Dialog(title, skin);
dialog.text(text).button("confirm", true).key(Keys.ENTER, true).key(Keys.ESCAPE, true);
dialog.setSize(400, 300);
dialog.getContentTable().pad(50, 30, 50, 30);
dialog.getButtonTable().pad(50);
return dialog.show(stage);
}
使用如下方法设置窗口大小无效。
void com.badlogic.gdx.scenes.scene2d.Actor.setSize(float width, float height)
查看源码后发现,调用 show 方法内部处理问题
pack() 方法跳转到 【com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup】
在该 pack 方法内会重新调用 setSize 方法。
解决
so 这下知道怎么回事了。只需要在 show 方法后调用 setSize 方法
public static Dialog showOkDialog(Stage stage, String title, String text, Skin skin) {
final Dialog dialog = new Dialog(title, skin);
dialog.text(text).button("confirm", true).key(Keys.ENTER, true).key(Keys.ESCAPE, true);
dialog.getContentTable().pad(50, 30, 50, 30);
dialog.getButtonTable().pad(50);
dialog.show(stage);
// 该方法必须在 dialog show 方法调用之后使用
dialog.setSize(GlobalData.WIDTH / 3, GlobalData.HEIGHT / 3);
// 注意 重新设置 size 后。位置不是屏幕居中了。若有需要,需要重新设置
return dialog;
}