gpt4 book ai didi

java - 如何根据元素大小为每行使用不同的列宽动态地将元素添加到 GridLayout?

转载 作者:可可西里 更新时间:2023-11-01 11:43:08 25 4
gpt4 key购买 nike

<分区>

我有一个可变大小的 array 标签,我想在 gridlayout 中显示这些标签。问题是标签的长度各不相同,将它们放在 statically 定义的网格中看起来有点乱,即使某些标签比其他标签大得多也是如此。

所以我希望能够一个接一个地放置一个标签,直到没有更多的空间留给一个完整的标签,然后转到下一行。基本上是这样的:

| *** ****** ****** ** ***** |
| ** ***** *** ********* *** |
| ********* ***** *** |
| ************** ******** |
| ****** ******** ******** |
| ***************** |
| ************** ***** ***** |

我想你们明白了。

现在,我得到了这样的东西,但它并没有完全满足我的需要。

int total = tags.size();
int column = 3;
int row = total / column;
suggestedTagsLayout.setColumnCount(column);
suggestedTagsLayout.setRowCount(row + 1);

for (int i = 0, c = 0, r = 0; i < total; i++, c++) {
if (c == column) {
c = 0;
r++;
}
TextView tag = createNewTag(tags.get(i));
tag.setBackgroundColor(Color.BLUE);
tag.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));

GridLayout.Spec rowSpan = GridLayout.spec(GridLayout.UNDEFINED, 1);
GridLayout.Spec colspan = GridLayout.spec(GridLayout.UNDEFINED, 1);
if (r == 0 && c == 0) {
logger.e("spec");
colspan = GridLayout.spec(GridLayout.UNDEFINED, 1);
rowSpan = GridLayout.spec(GridLayout.UNDEFINED, 1);
}

logger.d("\n\ntag = " + tag.getText().toString());

int width = tag.getWidth();
int height = tag.getHeight();

logger.d("width = " + width);
logger.d("height = " + height);

width = tag.getMeasuredWidth();
height = tag.getMeasuredHeight();

logger.d("getMeasuredWidth = " + width);
logger.d("getMeasuredHeight = " + height);

GridLayout.LayoutParams gridParam = new GridLayout.LayoutParams(
rowSpan, colspan);
suggestedTagsLayout.addView(tag, gridParam);
}

这看起来更像是:

| ***** **** ******** **** |
| **** ******** |
| ******* ****** |

所以我也在尝试获取每个 TextView 的宽度,以便我可以手动计算空间并相应地添加项目,但这也失败了,因为尺寸仍然是 0 因为它们没有被绘制。所以看来我必须相应地使用 API 才能获得所需的行为。

我对这个 GridLayout 还是个新手,而且 api 非常大,所以你们能帮帮我吗?

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