23

Tôi đang làm việc trong thiết kế material design api & muốn hiển thị một số dữ liệu ở định dạng lưới. Tôi đã thử cả hai GridLayoutStaggeredGridlayout và cả hai đều giống nhau. Để biết thông tin chung, tôi muốn hỏi sự khác biệt giữa GridlayoutStaggeredGridlayout là gì?

Cảm ơn bạn.Android - Sự khác biệt giữa Gridlayout và Gridlayout so le

+4

GridView là đối xứng và bất đối xứng GridView so le là .. –

Trả lời

43

Lưới xem: Đó là một ViewGroup hiển thị các mục trong lưới có thể cuộn hai chiều. Trong mỗi khung hình Lưới này có cùng kích thước (Chiều cao và chiều rộng). Chế độ xem lưới hiển thị các mục đối xứng trong chế độ xem.

Grid View

le Lưới Xem: Nó cơ bản là một phần mở rộng cho Grid View nhưng trong này mỗi Lưới là thay đổi kích thước (chiều cao và chiều rộng). Chế độ xem lưới so le hiển thị các mục không đối xứng trong chế độ xem.

staggered grid view

Hướng dẫn thực hiện so le Lưới Xem:

  1. Staggered Grid View
  2. Pinterest Masonry layout Staggered Grid View
0

A lưới so le Bố cục bao gồm nhiều cột có nhiều hàng có kích thước khác nhau.

Nó cho phép chế độ xem cột/hàng linh hoạt với đầu trang và chân trang và trông khá dễ thực hiện, mặc dù người dùng Gradle sẽ có thời gian dễ dàng hơn những người làm việc với Eclipse và Ant. Đây là giao diện trông giống như trong Etsy Github app mà nó được phát triển.

Trong khi đó, GridLayout là bố cục đặt con của nó vào lưới hình chữ nhật.

Nó đã được giới thiệu ở cấp API 14 và gần đây đã được backported trong Thư viện hỗ trợ. Mục đích chính của nó là để giải quyết vấn đề liên kết và hiệu suất trong các bố trí khác. Hãy xem this tutorial nếu bạn muốn tìm hiểu thêm về GridLayout.

1

StaggeredGridlayout

  1. Điều này sẽ đưa trẻ em ra khỏi sự hình thành lưới so le.
  2. Hỗ trợ bố cục dọc & dọc cũng như khả năng bố cục trẻ em ngược lại.
  3. Lưới so le có thể có khoảng trống ở các cạnh của bố cục.
  4. Để tránh các khoảng trống, StaggeredGridLayoutManager có thể bù trừ các nhịp độc lập hoặc di chuyển các mục giữa các nhịp. Bạn có thể kiểm soát hành vi này qua setGapStrategy(int).

GridLayout

  1. này đưa ra con của nó trong một lưới hình chữ nhật.
  2. Lưới bao gồm một tập hợp các đường vô cùng mỏng tách riêng khu vực xem thành các ô.
  3. Trẻ em chiếm một hoặc nhiều ô liền kề, như được xác định bởi thông số rowSpeccolumnSpec bố cục của chúng.

Example of GridLayout

+3

hình ảnh của bạn không phải là StaggeredGridLayout, nó tùy chỉnh GridLayout từ https://github.com/felipecsl/AsymmetricGridView –

1

Lưới Layout (API Level 14): Một cách bố trí mà đặt con của nó trong một lưới hình chữ nhật. Số hàng và cột trong lưới có thể được khai báo sử dụng thuộc tính android:rowCountandroid:columnCount. Thông thường, tuy nhiên, nếu số cột được khai báo thì GridLayout sẽ suy ra số hàng dựa trên số lượng ô bị chiếm đóng khiến việc sử dụng thuộc tính rowCount không cần thiết. Tương tự, định hướng của GridLayout có thể được xác định tùy chọn thông qua thuộc tính android:orientation.

Tôi nghĩ rằng không có StaggeredGridLayout riêng biệt. Dưới đây là những điều chúng ta có

StaggeredGridLayoutManager: Nó là một trong những người quản lý một cách bố trí sử dụng trong Recyclerview.A LayoutManager đẻ ra trẻ em trong một hình lưới so le. Nó hỗ trợ ngang & bố trí dọc cũng như khả năng bố trí trẻ em ngược lại.

le GridView: Các StaggeredGridView cho phép người dùng tạo một GridView với hàng không đồng đều tương tự như cách Pinterest trông. Bao gồm OnItemClickListener và OnItemLongClickListener, bộ chọn và khôi phục vị trí cố định của riêng bạn. Vui lòng xem this ví dụ.

2

Thời gian của tôi tại Oodles Technologies đã dạy tôi về sự so le. Tôi sẽ chia sẻ điều đó.

StaggeredGridLayout là Trình quản lý bố cục, nó giống như chế độ xem lưới nhưng trong lưới này mỗi chế độ xem có kích thước riêng (chiều cao và chiều rộng). Nó hỗ trợ cả bố cục dọc và ngang.

Dưới đây là một số bước cơ bản để tạo ra một grid- so le

1) Tạo một cái nhìn.

Như chúng ta biết staggeredgrid không phải là một cái nhìn trực tiếp nó là một layoutmanager mà đẻ ra trẻ em trong một sự hình thành lưới so le. Chúng tôi sử dụng RecyclerView làm chế độ xem cho lưới ô vuông. đây là recyclerview của chúng tôi trong bố trí

<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) Set StaggeredGridLayout LayoutManager.

Khi chế độ xem của chúng tôi sẵn sàng, hãy sử dụng Layoutmanager để tạo lưới trên chế độ xem.

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) Bộ điều hợp để tăng lượt xem so le.

Để thổi phồng các dữ liệu dưới dạng lưới đầu tiên chúng ta cần một cách bố trí này sẽ đại diện cho rằng data.We đang sử dụng CardView cho điều này và cách bố trí là-

<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> 

Sau đó Chúng tôi thiết lập của chúng tôi tất cả các bước cơ bản, đã đến lúc hoàn thành hoạt động chính của chúng tôi. đây là mã hoàn chỉnh các hoạt động- chính

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; 
    } 
} 
Các vấn đề liên quan