android – 使用LayoutParams.addRule设置动态设置视图到视图的最后位置

前端之家收集整理的这篇文章主要介绍了android – 使用LayoutParams.addRule设置动态设置视图到视图的最后位置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在动态地将视图添加到相对布局并以编程方式定义它们.视图可以在屏幕上移动,因此它们的位置会发生变化.

当我尝试将视图(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.我没有测试它,但我希望它能工作.因此代码应如下所示:

Buttons 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();
原文链接:https://www.f2er.com/android/431277.html

猜你在找的Android相关文章