Android会根据行的大小动态列出行中的项目

时间:2014-02-09 23:07:43

标签: android android-layout android-listview android-gridview android-tablelayout

问题是,我想以编程方式将TAGS(如帖子底部的那些)添加到我的屏幕视图中。数量将是未知的,但在10的范围内可以说。我知道我可以使用水平列表视图,但我不知道如何甚至可以将不适合的标签包装到下一行。我不认为这是可能的。接下来,使用Gridview是一个选项,但如果它们具有不同的长度,如何为每个标记分配水平空格?是否有可能在不知道金额的情况下连续列出它们并使它们动态地换行到“下一行”?

1 个答案:

答案 0 :(得分:1)

最近我不得不露出类似于你所要求的东西。我最终决定使用TableView,并动态构造TableRow。这似乎很好,直到我遇到如何知道何时向现有TableRow添加新项目或将行添加到TableView并开始新项目的问题。

一种解决方法(有些人甚至可能称之为黑客攻击),我特别不喜欢但工作原理如下:使用如下代码测量屏幕宽度:

final Display display = getWindowManager().getDefaultDisplay();
final Point size = new Point();
display.getSize(size);

final WindowManager.LayoutParams params = getWindow().getAttributes();

您可以在params.width参数中获得屏幕宽度。我通过0.95对它进行了多次处理,以使其不严格适合行,主要是因为它可能无法正常工作。

所以现在,你需要有一个循环来处理你想要添加的所有项目,我们假设它们是TextView。保持已经添加的宽度计数,如果新项目的宽度超过宽度,请将其添加到下一行。

totalwidth = 0;
for (TextView tv : myTVitems) {
  if (totalwidth + tv.getWidth() < parameters.width * 0.95) {
    // Add it to the existing row
    totalwidth += tv.getWidth();
  }
  else {
    // Add the `TableRow` to the `TableView` and start a new `TableRow`
    totalwidth = 0;
  }
}

我是从内存中写的,所以如果没有任何明确的演员表,它可能无法编译,但这就是想法。