gpt4 book ai didi

android - 使用 LayoutParams.addRule 设置动态设置 View 到 View 的最后位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:43:42 24 4
gpt4 key购买 nike

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

当我尝试将 View (button2) 设置为位于另一个 View (button1) 下方时,button2 被放置在 button1 的旧位置(在移动之前添加 View 的默认位置)。我已经链接了图片,希望能更好地传达这一点。

这是原始布局 Original Layout

Button2 重新定位后的布局 Re-positioned Layout

我有一个后台 LinkedList 跟踪布局的所有 View 更改和 View 属性(如果有差异的话)。

代码功能如下:

我如何重新定位 Button1:

Buttons b = (Buttons) viewIndex;
positioningLayout = new RelativeLayout.LayoutParams(b.getLayoutParams());
positioningLayout.addRule(RelativeLayout.CENTER_VERTICAL);
b.setLayoutParams(positioningLayout);
baseLayout.addView(b);

在另一个 View 下方重新定位 View 代码 fragment :

Buttons b = (Buttons) viewIndex;
positioningLayout = new RelativeLayout.LayoutParams(b.getLayoutParams());
positioningLayout.addRule(RelativeLayout.BELOW, viewIdFromList.intValue());
b.setLayoutParams(positioningLayout);
b.invalidate();

我如何将 View 添加到布局中。

uiList.addView(new Buttons(this), "BUTTON");
setDialogView(uiList.getLast());
showDialog(SET_ID);
reloadUI();

setDialogView 只是将 View 传递给对话框 SET_ID,这样我就可以手动为 View 分配一个 ID(用于测试)。reloadUI()只是找到最后添加到后台LinkedList的 View ,并使用.addView将其添加到relativeLayout;

如果您需要更多代码,请告诉我。在对 relativeLayout subview 进行更改后,我是否错过了更新 View 布局的调用?看起来 View 在视觉上正在重新定位,但实际的 LayoutParams 没有更新,所以当您将 Button2 设置为 Button1 时,它正在获得旧位置。

有没有办法强制相对布局 View 重新定位?

最佳答案

我认为您应该尝试简单的解决方案 - 将 b.invalidate() 替换为 b.requestLayout()。更多背景调查 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();

关于android - 使用 LayoutParams.addRule 设置动态设置 View 到 View 的最后位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30718795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com