Добавление полей вокруг ячеек GridLayout - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь выяснить, как добавить поля вокруг фрагментов, добавляемых в GridLayout.

GridLayout gridLayout = mRegionPage.findViewById(R.id.xglRegionPage);

GridLayout.MarginLayoutParams foo = 
        new GridLayout.MarginLayoutParams(GridLayout.LayoutParams.WRAP_CONTENT, 
                                          GridLayout.LayoutParams.MATCH_PARENT);

foo.setMargins(20, 20, 20, 20);
gridLayout.setLayoutParams(foo);

Ресурс xml выглядит как

<GridLayout
    android:id="@+id/xglRegionPage"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:rowCount="2"
    ... />

Я получаю ошибка:

java.lang.ClassCastException: android.view.ViewGroup$MarginLayoutParams 
            cannot be cast to android.widget.FrameLayout$LayoutParams
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:186)
    at android.widget.HorizontalScrollView.onMeasure(HorizontalScrollView.java:491)

Если я закомментирую строку, которая устанавливает параметры макета, ошибки не будет.

GridLayout gridLayout = mRegionPage.findViewById(R.id.xglRegionPage);

GridLayout.MarginLayoutParams foo = 
        new GridLayout.MarginLayoutParams(GridLayout.LayoutParams.WRAP_CONTENT, 
                                          GridLayout.LayoutParams.MATCH_PARENT);

foo.setMargins(20, 20, 20, 20);
///gridLayout.setLayoutParams(foo);

Проблема для меня заключается в том, что я не использую ни одного FrameLayout в любом проекте. Я проверил все части инструментария, которые я использую, и ни одна из них не является подклассом из FrameLayout.

Есть ли альтернативный способ выполнить sh this?

Как FrameLayout запутался в все это? Или GridLayout построен на основе FrameLayout?

Если я хочу, чтобы два ряда карт с некоторым интервалом между ними, нужно было использовать два линейных макета?

Было предложено добавить поля к основанию фрагмента, который у меня уже есть без эффекта. Они выглядят так:

<androidx.constraintlayout.widget.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"

  android:id="@+id/clRegionFragment"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:background="@drawable/excited_shape"
  android:layout_marginRight="50dp"
  android:layout_marginLeft="50dp"
  android:layout_marginTop="50dp"

1 Ответ

0 голосов
/ 17 марта 2020

(Опубликовано от имени автора вопроса, чтобы переместить решение в область ответа) .

Проблема была добавлена ​​в GridLayout.LayoutParams, который я создал до того, как фрагмент был завышены, тем самым исключив любое из значений из фрагмента xml. Вместо этого я добавил строку и столбец для позиции сетки к фрагменту, и после того, как фрагмент был раздут, я установил параметры для строки и столбца таблицы spe c.

...