Android-разница между Gridlayout и шахматным Gridlayout

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

спасибо.

5 ответов


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

Grid View

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

staggered grid view

учебник по реализации шахматного вида сетки:

  1. Шахматный Вид Сетки
  2. Pinterest кладки макет шахматном порядке сетки вид

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

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

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

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


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

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

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

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

как мы знаем, staggeredgrid не прямой вид это layoutmanager, который раскладывает детей в шахматном порядке формирования сетки. Мы используем 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) адаптер для раздувания представлений staggeredgrid.

чтобы раздуть данные в виде сетки, сначала нам нужен макет которые будут представлять эти данные.Мы используем 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 смогите возместить пяди независимо или двинуть детали между пядями. Вы можете контролировать это поведение через setGapStrategy(int).

GridLayout

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

Example of GridLayout


A шахматном порядке сетки включает в себя несколько столбцов в несколько строк различных размеров.

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

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

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