У меня есть две идеи.
Обе они очень похожи на предложения от hackbod
Вместо реализации подкласса из ViewGroup, вы можете создать что-то вроде расширяющего SquareButton Buttonили SquareTableLayout, расширяющий TableLayout.
Переопределить класс конструктора, чтобы вы заменили значение ширины или высоты на наименьшее значение из них обоих.Я не уверен, но, думаю, вы сможете использовать новые макеты в XML-описании.
Возможно, проще создать просто SquareTableLayout
Тогда просто установите ширину и высотувсех элементов в TableLayout до 0dip, а вес всех из них равен 1.
Предполагая, что в вашей таблице NxN элементов, все они получат одинаковую ширину и одинаковую высоту из-за одинакового веса.