我已经花了好几个小时试图解决这个问题,并且发疯了,请看看我的问题。

该图说明了该问题:

Image illustrating this


exitButtonsetFillParent功能设置为false时,
结果在图像的右侧,按钮居中
Container中,但是大小错误。
exitButtonsetFillParent功能设置为true时,
结果是图像的左侧,按钮的大小正确
但是位置错了


这是代码:

    Container container = new Container(exitButton);

    container.fill();

    container.setRound(false);

    container.setSize(buttonSize, buttonSize);

    exitButton.setFillParent(true);

    //exitButton.setFillParent(false);

    container.setPosition(
            ((float)viewportWidth/7f) - (buttonSize/2f)
            ,((float)viewportHeight*5f/6f)  - (buttonSize/2f)
    );

最佳答案

小部件的设计要根据其父母的大小而定。 setFillParent(true)允许小部件覆盖它并设置其自己的大小(以匹配其父级的大小)。除非它是层次结构的顶层小部件,否则您永远都不想这样做,因为当小部件控制自己的大小时,它的父级将失去正确定位它的能力。

至于为什么将按钮绘制为大于容器的原因,如果子级的minWidth / minHeight大于父级,则可能会发生这种情况。假设exitButton是一个ImageButton或仅仅是一个Button,这意味着其Image或背景的可绘制对象大于buttonSize

解决此问题的最简单方法是覆盖getMinWidth()getMinHeight()以返回零。例如:

exitButton = new Button(skin, style){
    public float getMinWidth(){return 0;}
    public float getMinHeight(){return 0;}
};

10-04 20:26