我正在动态地向相对布局中添加视图,并以编程方式定义它们。这些视图可以在屏幕上移动,因此它们的位置会发生变化。
当我尝试将一个视图(button2)设置为另一个视图(button1)下方时,button2会被放置在button1的旧位置(视图在移动之前默认的位置)。我已经链接了图片,希望能更好地传达这一点。
这是原始布局
重新定位Button2后的布局
如果有LinkedList来跟踪布局中所有视图更改和视图属性,则可能会有所不同。
以下是代码函数:
我如何重新定位Button1:
重新定位视图在另一个视图下方 代码片段:
我将添加视图到布局的方法展示如下。
setDialogView只是将视图传递给Dialog SET_ID,以便我可以手动为视图分配ID(用于测试)。 reloadUI()只需找到添加到背景LinkedList中的最后一个视图,并使用.addView将其添加到relativeLayout中;
如果需要更多的代码,请告诉我。在更改relativeLayout子视图后,我是否漏掉了更新视图布局的调用?似乎视图在视觉上重新定位,但实际的LayoutParams没有更新,因此当您将Button2设置为Button1时,它会获得旧位置。
有没有一种方法可以强制相对布局视图重新定位?
当我尝试将一个视图(button2)设置为另一个视图(button1)下方时,button2会被放置在button1的旧位置(视图在移动之前默认的位置)。我已经链接了图片,希望能更好地传达这一点。
这是原始布局
![Original Layout](https://istack.dev59.com/Y8tZT.webp)
![Re-positioned Layout](https://istack.dev59.com/Sk4wU.webp)
以下是代码函数:
我如何重新定位Button1:
Buttons b = (Buttons) viewIndex;
positioningLayout = new RelativeLayout.LayoutParams(b.getLayoutParams());
positioningLayout.addRule(RelativeLayout.CENTER_VERTICAL);
b.setLayoutParams(positioningLayout);
baseLayout.addView(b);
重新定位视图在另一个视图下方 代码片段:
Buttons b = (Buttons) viewIndex;
positioningLayout = new RelativeLayout.LayoutParams(b.getLayoutParams());
positioningLayout.addRule(RelativeLayout.BELOW, viewIdFromList.intValue());
b.setLayoutParams(positioningLayout);
b.invalidate();
我将添加视图到布局的方法展示如下。
uiList.addView(new Buttons(this), "BUTTON");
setDialogView(uiList.getLast());
showDialog(SET_ID);
reloadUI();
setDialogView只是将视图传递给Dialog SET_ID,以便我可以手动为视图分配ID(用于测试)。 reloadUI()只需找到添加到背景LinkedList中的最后一个视图,并使用.addView将其添加到relativeLayout中;
如果需要更多的代码,请告诉我。在更改relativeLayout子视图后,我是否漏掉了更新视图布局的调用?似乎视图在视觉上重新定位,但实际的LayoutParams没有更新,因此当您将Button2设置为Button1时,它会获得旧位置。
有没有一种方法可以强制相对布局视图重新定位?
requestLayout()
,而当视图的外观发生变化时,则应该调用invalidate()
。一方面,当您调用requestLayout()
时,视图的onLayout()
和onMeasure()
方法将被触发;另一方面,当您调用invalidate()
时,onDraw()
方法将被触发。 - romtsninvalidate()
只是重新绘制视图本身,而requestLayout()
则更新视图的位置和边界。不用谢,期待您的奖励 :D - romtsn