Подтвердить что ты не робот

Android - разница между Gridlayout и Staggered Gridlayout

Я работаю в дизайне анимированных материалов api и хочу отображать некоторые данные в формате сетки. Я пробовал как GridLayout, так и StaggeredGridlayout, и оба выглядят одинаково. Для общей информации, я хочу спросить , в чем разница между GridLayout и StaggeredGridlayout?

Спасибо.

4b9b3361

Ответ 1

Вид сетки. Это ViewGroup, который отображает элементы в двумерной прокручиваемой сетке. В этом случае каждая Сетка имеет одинаковый размер (Высота и ширина). Сетка отображает симметричные элементы в представлении.

Grid View

Просмотр сетки с сеткой. Это в основном расширение до Grid View, но в этом каждый Сетка имеет разный размер (высота и ширина). Просмотр пошаговой сетки показывает асимметричные элементы в поле зрения.

staggered grid view

Учебное пособие по реализации шахматной сетки:

Ответ 2

Мое время в Oodles Technologies научило меня пошатываться. Я поделюсь этим.

StaggeredGridLayout - это LayoutManager, он похож на вид сетки, но в этой сетке каждый вид имеет свой собственный размер (высота и ширина). Он поддерживает как вертикальные, так и горизонтальные макеты.

Ниже приведены некоторые основные шаги для создания шахматной сетки -

1) Создайте представление.

Как мы знаем, staggeredgrid не является прямым представлением, это менеджер макета, который выставляет детей в шахматном порядке. Мы используем RecyclerView как представление для сетки staggerd. вот наш recyclerview в макете -

<relativelayout android:layout_height="match_parent" android:layout_width="match_parent" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.deepanshu.staggered_gridlayout.MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    <android.support.v7.widget.recyclerview android:id="@+id/favPlaces" android:layout_height="match_parent" android:layout_width="match_parent">
</android.support.v7.widget.recyclerview></relativelayout>

2) Установите StaggeredGridLayout LayoutManager.

Как только наше представление будет готово, позвольте использовать Layoutmanager для создания сетки в представлении.

RecyclerView favPlaces = (RecyclerView) findViewById(R.id.favPlaces);
       StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
       layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
       favPlaces.setLayoutManager(layoutManager);
       favPlaces.setHasFixedSize(true);

3) Адаптер для раздувания просмотров с шагами.

Чтобы раздуть данные в форме сетки, нам понадобится макет, который будет представлять эти данные. Мы используем CardView для этого, а макет -

<android.support.v7.widget.cardview android:layout_height="wrap_content" android:layout_width="match_parent" app:cardcornerradius="4dp" app:cardusecompatpadding="true">
    <linearlayout android:background="@color/colorPrimary" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical">



    <imageview android:adjustviewbounds="true" android:id="@+id/placePic" android:layout_height="match_parent" android:layout_width="match_parent" android:scaletype="fitXY">

           <textview android:gravity="center" android:id="@+id/placeName" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="16sp">


    </textview></imageview></linearlayout>
</android.support.v7.widget.cardview>

</linearlayout>

Затем мы настраиваем все основные этапы, время, необходимое для завершения нашей основной деятельности. вот полный код основной деятельности -

public class MainActivity extends AppCompatActivity {

    int placeImage[]= {R.drawable.agattia_airport_lakshadweep,R.drawable.nainital,R.drawable.goa,
            R.drawable.lotus_temple,R.drawable.valley_of_flowers,R.drawable.ranikhet,R.drawable.dehradun,R.drawable.nainital1};

    String placeName[]= {"Lakshadweep, India","Nainital, India","Goa, India","Lotus-Temple, India","Valley-Of-Flowers, India","Ranikhet, India",
    "Dehradun, India","Nainital, India"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView favPlaces = (RecyclerView) findViewById(R.id.favPlaces);
        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
        favPlaces.setLayoutManager(layoutManager);
        favPlaces.setHasFixedSize(true);
        ArrayList<PlaceDetails> placeList = getPlaces();

        StaggeredAdapter staggeredAdapter = new StaggeredAdapter(placeList);
        favPlaces.setAdapter(staggeredAdapter);
    }

    private ArrayList<PlaceDetails> getPlaces() {
        ArrayList<PlaceDetails> details = new ArrayList<>();
        for (int index=0; index<placeImage.length;index++){
            details.add(new PlaceDetails(placeImage[index],placeName[index]));
        }
        return details;
    }
}

Ответ 3

StaggeredGridlayout

  • Это определяет детей в шахматном порядке.
  • Он поддерживает горизонтальную и вертикальную компоновку, а также возможность компоновать дочерние объекты в обратном порядке.
  • У шахматных сеток, вероятно, будут зазоры по краям макета.
  • Чтобы избежать пробелов, StaggeredGridLayoutManager может самостоятельно компенсировать интервалы или перемещать элементы между промежутками. Вы можете управлять этим поведением с помощью setGapStrategy(int).

83SEA.png

GridLayout

  • Это определяет его дочерние элементы в прямоугольной сетке.
  • Сетка состоит из набора бесконечно тонких линий, которые разделяют область просмотра на ячейки.
  • Дети занимают одну или несколько смежных ячеек, как определено их параметрами макета rowSpec и columnSpec.

Пример GridLayout

Ответ 4

Макет сетки (API-уровень 14): Макет, который помещает своих детей в прямоугольную сетку. Количество строк и столбцов в сетке можно объявить с помощью свойств android:rowCount и android:columnCount. Как правило, однако, если объявлено количество столбцов, GridLayout выведет количество строк на основе количества занятых ячеек, что делает ненужным использование свойства rowCount. Аналогично, ориентация GridLayout может быть опционально определена с помощью свойства android:orientation.

Я думаю, что нет отдельного StaggeredGridLayout. Вот что мы делаем:

StaggeredGridLayoutManager: Это один из менеджеров компоновки, используемых в Recyclerview.A LayoutManager, который выставляет детей в шахматном порядке. Он поддерживает горизонтальную и вертикальную компоновку, а также возможность компоновать дочерние объекты в обратном порядке.

Staggered GridView: StaggeredGridView позволяет пользователю создавать GridView с неравными строками, похожими на то, как выглядит Pinterest. Включает собственные OnItemClickListener и OnItemLongClickListener, селектор и исправление фиксированной позиции. Пожалуйста, просмотрите пример this.

Ответ 5

A Разнесенная сетка. Макет включает несколько столбцов с несколькими строками разного размера.

Он позволяет использовать гибкое представление столбца/строки с верхним и нижним колонтитулом и выглядит довольно легко реализуемым, хотя Gradle пользователям будет легче, чем те, которые работают с Eclipse и Ant. Вот как выглядит представление в приложении Etsy Github, для которого оно было разработано.

В то время как GridLayout - это макет, который помещает его дочерние элементы в прямоугольную сетку.

Он был введен в API уровня 14 и был недавно включен в библиотеку поддержки. Его основная цель - решить проблемы выравнивания и производительности в других макетах. Ознакомьтесь с этот учебник, если вы хотите узнать больше о GridLayout.