Я рекомендую использовать другой подход, применить родительский макет gravity="center_horizontal"
, а следующим шагом будет создание собственного представления, расширяющего класс ImageButton
для установки его размера в виде квадрата, это действительно просто.
Итак, создайте новый класс, назовем его SquareImageButton
и расширим ImageButton
. добавьте конструктор по умолчанию с контекстом и атрибутами и позвольте ему вызывать суперфункцию, вам больше ничего не нужно добавлять.
Теперь переопределите метод onMeasure()
(который дает измеренную ширину и высоту в значениях int), примите минимальное значение и (как требует метод) вызовите setMeasuredDimension(w, h)
с новым минимальным значением, чтобы оно было квадратным. Это сработало для меня, и вот код, если вы немного потерялись:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int minDimension = Math.min(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(minDimension, minDimension);
}