Gridlayout с квадратными детьми

Я пытался достичь GridLayout с квадратными детьми, как вы можете видеть по этому изображению.

Введите описание изображения здесь

Таким образом, в основном представление должно корректироваться в зависимости от количества элементов без объявления размера столбца и размера строки. Возможно ли это для GridLayout ? Если нет, тогда забудьте об этом вопросе.

Теперь давайте перейдем к квадратной части. Я пробовал реализовать этот код

 public class SquareLinearLayout extends LinearLayout { public SquareLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int widthSize = MeasureSpec.getSize(widthMeasureSpec); final int heightSize = MeasureSpec.getSize(heightMeasureSpec); if (widthSize == 0 && heightSize == 0) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); final int minSize = Math.min(getMeasuredWidth(), getMeasuredHeight()); setMeasuredDimension(minSize, minSize); return; } final int size; if (widthSize == 0 || heightSize == 0) { size = Math.max(widthSize, heightSize); } else { size = Math.min(widthSize, heightSize); } final int newMeasureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY); super.onMeasure(newMeasureSpec, newMeasureSpec); } } 

Хотя он делает квадрат макета ребенка, он также занимает всю ширину экрана, выталкивая других детей из видимой части макета.

У вас есть какие-либо ссылки или у вас есть код, похожий на этот класс, но не занимающий всю ширину макета? Заранее спасибо.

Никогда не работаю я, используя тот же код выше и помещаю элементы в TableLayout вместо Gridlayout.

Вот пример кода, если вы застряли в этой ситуации, как я. Сначала я создаю макет для квадратного.

 <?xml version="1.0" encoding="utf-8"?> <com.android.f45tv.view.ui.SquareLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/sllContainer" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="2dp" android:orientation="vertical"> <LinearLayout android:id="@+id/llHolder" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="2dp" android:gravity="center" android:orientation="vertical"> <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@color/white" android:layout_marginBottom="2dp" android:gravity="center_horizontal" /> <TextView android:id="@+id/tvPercent" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="40sp" android:textColor="@color/white" android:gravity="center" /> <TextView android:id="@+id/tvBPM" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/white" android:textSize="12sp" android:gravity="end" /> <TextView android:id="@+id/tvBPMLabel" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="bpm" android:textSize="10sp" android:textColor="@color/white" android:gravity="end" /> </LinearLayout> </com.android.f45tv.view.ui.SquareLinearLayout> 

Затем добавьте его в мой основной макет деятельности с тегом include внутри строки таблицы.