У меня есть 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 довольно большой, поэтому, ребята, не могли бы вы мне помочь?