- Home /
Change each cell size based on amount of text in grid layout group
Hi,
I have some buttons in my grid, I need to change each cell size (the background of button) to match the text on each button..
I tried getting the component and doing this GridLayout.cellSize = Vector2.one * Mathf.RoundToInt(Number);
But this will just change to the same size for all of the cells, which I don't want. And text is different on some of the buttons, so it looks rather silly.
Any ideas on how to change it for each?
Image of what I want to achieve:
Answer by Cycy · Feb 21, 2017 at 02:27 PM
Hi, (sry for my English) its late but this is how i manage to do the exact same thing but with text (its the same idea for button i guess). You need to use Vertical and Horizontal layout instead of Grid.
1) A GameObject parent with a VerticalLayoutGroup on it with "control child size" enabled (width and heigh). Put the following script on it.
2) The rowPrefab is an EmptyGameObject with "HorizontalLayoutGroup" on it with "control child size" enabled (width and heigh) and "child force expend" enabled (only width).
3) the script
public GameObject rowPrefab;
public Button butPrefab;
float currentRowLength = 0;
float maxRowLength = _maxRowLength;
GameObject currentRow;
for (int i = 0; i < nbButton; i++)
{
if (i == 0 || (currentRowLength + newButton.Length > _maxRowLength)) // if too many char on the current row, create a new one.
{
GameObject newRow = Instantiate(rowPrefab, transform, false);
currentRow = newRow;
currentRowLength = 0;
}
newButton = (Button)Instantiate(butPrefab, currentRow.transform, false); // new button
newButton.text = textButton; // change button's text
currentRowLength += newtext.text.Length;
}
}