Будут ли все ключевые "ширины" и "высоты" кратны наименьшей ширине / высоте ключа? Если это так, вы можете вкладывать горизонтальные и вертикальные LinearLayouts по мере необходимости для описания клавиатуры, используя layout_weight, чтобы сделать ваши клавиши двойной ширины или двойной высоты.
Например, если я смотрю на клавиатуру на моей рабочей станции, то это, по сути, сетка клавиш 5x4, с двойными высокими клавишами «+» и «ввод» в крайнем правом столбце и двойной шириной 0 в нижнем левом положении (довольно стандартная конфигурация, обратитесь к вашей собственной в этом описании). Я могу сделать вертикальные линейные макеты для каждого из столбцов "поверх" 0 {numlock, 7,4,1} и {/, 8,5,2}. Затем их можно поместить в горизонтальную линейную схему, чтобы сгруппировать все 8 клавиш. Эту сборку можно комбинировать с кнопкой «0» в другой вертикальной компоновке, с весом «4» для 8-клавишной сборки и «1» для «0». Давайте назовем эту полную сборку из 9 ключей A. Теперь вы можете создавать вертикальные линейные макеты для {*, 9,6,3} и {-, +, enter}. Во втором из них дайте веса 2 каждому + и введите ключ. Наконец, используйте горизонтальную линейную компоновку, чтобы сгруппировать сборку A с двумя другими вертикальными компоновками.