我正在动态地将视图添加到相对布局并以编程方式定义它们.视图可以在屏幕上移动,因此它们的位置会发生变化.
当我尝试将视图(button2)设置为位于另一个视图(button1)下方时,button2将被放置在button1的旧位置(在移动之前添加视图的默认位置).我已经链接了图像,希望能更好地传达这一点.
这是原始布局
Button2重新定位后的布局
我有一个后台LinkedList跟踪所有视图更改和布局的视图属性,如果这有所不同.
我如何重新定位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时,它将获得旧位置.
有没有办法强制相对布局视图重新定位?
最佳答案
我认为你应该尝试简单的解决方案 – 用b.requestLayout()替换b.invalidate().有关更多背景检查this link.我没有测试它,但我希望它能工作.因此代码应如下所示:
原文链接:https://www.f2er.com/android/431277.htmlButtons b = (Buttons) viewIndex;
positioningLayout = new RelativeLayout.LayoutParams(b.getLayoutParams());
positioningLayout.addRule(RelativeLayout.BELOW,viewIdFromList.intValue());
b.setLayoutParams(positioningLayout);
b.requestLayout();
或者你可以简化这个:
Buttons b = (Buttons) viewIndex;
((RelativeLayout.LayoutParams) b.getLayoutParams()).addRule(RelativeLayout.BELOW,viewIdFromList.intValue());
b.requestLayout();