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

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

Спасибо.

Solutions Collecting From Web of "Android – разница между Gridlayout и Staggered Gridlayout"

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

Вид сетки

Shageded Grid View : в основном это расширение для Grid View но в этом каждая сетка имеет разный размер (высота и ширина) . В режиме шахматной сетки показаны асимметричные элементы.

Вид сетчатой ​​сетки

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

  1. Просмотр сетчатой ​​сетки
  2. Pinterest Масонство макет Шахматизированный вид сетки

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

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

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

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

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

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

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

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

Поскольку мы знаем, что staggeredgrid не является прямым представлением, это менеджер макета, который выставляет детей в шахматном порядке. Мы используем RecyclerView в качестве вида для сетки с треском. Вот наш 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; } } 

StaggeredGridlayout

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

Макет сетки

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

Пример GridLayout

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

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

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

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