Android - разница между Gridlayout и Staggered Gridlayout
Я работаю в Android API дизайн материала и хочу отобразить некоторые данные в формате сетки. Я пробовал оба GridLayout
а также StaggeredGridlayout
и оба выглядят одинаково. Для общей информации, я хочу спросить, в чем разница между Gridlayout
а также StaggeredGridlayout
?
Спасибо.
5 ответов
Вид сетки: это ViewGroup
который отображает элементы в двумерной, прокручиваемой сетке. При этом каждая сетка имеет одинаковый размер (высота и ширина). Grid View показывает симметричные элементы в поле зрения.
Вид в шахматном порядке: это в основном расширение Grid View
но в этом каждая Сетка имеет различный размер (Высота и ширина). Вид в шахматном порядке показывает асимметричные элементы в поле зрения.
Учебник по реализации Staggered Grid View:
Мое время в Oodles Technologies научило меня шататься. Я поделюсь этим.
StaggeredGridLayout - это LayoutManager, он похож на вид сетки, но в этой сетке каждый вид имеет свой собственный размер (высоту и ширину). Он поддерживает как вертикальные, так и горизонтальные макеты.
Ниже приведены некоторые основные шаги для создания разнесенной сетки.
1) Создать вид.
Как мы знаем, staggeredgrid - это не прямое представление, это менеджер компоновки, который размещает дочерние элементы в шахматном порядке. Мы используем 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
- Это раскладывает детей в шахматном порядке.
- Он поддерживает горизонтальное и вертикальное расположение, а также возможность размещения дочерних элементов в обратном порядке.
- Пошаговые сетки, скорее всего, имеют зазоры по краям макета.
- Чтобы избежать пробелов,
StaggeredGridLayoutManager
может независимо компенсировать пролеты или перемещать элементы между промежутками. Вы можете контролировать это поведение с помощьюsetGapStrategy(int)
,
Макет сетки
- Это раскладывает своих детей в прямоугольную сетку.
- Сетка состоит из набора бесконечно тонких линий, которые разделяют область просмотра на ячейки.
- Дети занимают одну или несколько смежных клеток, как это определено их
rowSpec
а такжеcolumnSpec
параметры макета.
Макет сетки (уровень API 14): макет, который помещает своих дочерних элементов в прямоугольную сетку. Количество строк и столбцов в сетке может быть объявлено с помощью android:rowCount
а также android:columnCount
свойства. Однако, как правило, если объявлено количество столбцов, GridLayout выведет количество строк на основе количества занятых ячеек, что делает использование свойства rowCount ненужным. Точно так же ориентация GridLayout может быть опционально определена через android:orientation
имущество.
Я думаю, что нет отдельной StaggeredGridLayout. Вот что у нас есть
StaggeredGridLayoutManager: это один из менеджеров макетов, используемых в Recyclerview.A LayoutManager, который размещает дочерние элементы в шахматном порядке. Он поддерживает горизонтальное и вертикальное расположение, а также возможность размещения дочерних элементов в обратном порядке.
Staggered GridView: StaggeredGridView позволяет пользователю создавать GridView с неровными рядами, похожими на то, как выглядит Pinterest. Включает собственный OnItemClickListener и OnItemLongClickListener, селектор и восстановление фиксированной позиции. Пожалуйста, посмотрите на этот пример.
Схема расположения в шахматном порядке включает несколько столбцов с несколькими строками разных размеров.
Он обеспечивает гибкое представление столбцов / строк с верхним и нижним колонтитулами и выглядит довольно легко реализуемым, хотя пользователям Gradle будет легче, чем тем, кто работает с Eclipse и Ant. Так выглядит представление в приложении Etsy Github, для которого оно было разработано.
Принимая во внимание, что GridLayout - это макет, который помещает своих дочерних элементов в прямоугольную сетку.
Он был представлен на уровне API 14 и недавно был перенесен в библиотеку поддержки. Его основная цель - решить проблемы с выравниванием и производительностью в других макетах. Посмотрите этот учебник, если вы хотите узнать больше о GridLayout.