web-dev-qa-db-ja.com

Android-GridlayoutとStaggered Gridlayoutの違い

私はAndroidマテリアルデザインAPIで作業しています。グリッド形式でデータを表示したいです。GridLayoutStaggeredGridlayoutの両方を試しました。情報、私は尋ねたいGridlayoutStaggeredGridlayout?の違いは何ですか?

ありがとうございました。

32
IBRAR AHMAD

グリッドビュー:これは、アイテムを2次元のスクロール可能なグリッドで表示するViewGroupです。この各グリッドは同じサイズ(高さと幅)です。グリッドビューは、対称アイテムを表示します。

Grid View

スタッガードグリッドビュー:基本的にはGrid Viewしかし、このそれぞれグリッドはさまざまなサイズ(高さと幅)。スタッガードグリッドビューでは、非対称のアイテムが表示されます。

staggered grid view

スタッガードグリッドビューを実装するチュートリアル:

  1. スタッガードグリッドビュー
  2. Pinterestメーソンリーレイアウトスタッガードグリッドビュー
59
Vipul Asri

Oodles Technologiesでの時間は、ずらりと並んで教えてくれました。それを共有します。

StaggeredGridLayoutはLayoutManagerで、グリッドビューに似ていますが、このグリッドでは各ビューに独自のサイズ(高さと幅)があります。垂直レイアウトと水平レイアウトの両方をサポートしています。

スタッガードグリッドを作成する基本的な手順は次のとおりです。

1)ビューを作成します。

スタッガードグリッドは直接的なビューではないことがわかっているので、子をスタッガードグリッド構成でレイアウトするレイアウトマネージャーです。スタッガードグリッドのビューとして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;
    }
}
6

グリッドレイアウト(APIレベル14):子を長方形のグリッドに配置するレイアウト。グリッド内の行と列の数は、Android:rowCountおよびAndroid:columnCountプロパティを使用して宣言できます。ただし、通常、列の数が宣言されている場合、GridLayoutは占有セルの数に基づいて行の数を推測し、rowCountプロパティの使用を不要にします。同様に、GridLayoutの向きは、オプションでAndroid:orientationプロパティを介して定義できます。

別のStaggeredGridLayoutはないと思います。ここに私たちが持っているものがあります

StaggeredGridLayoutManager:これは、Recyclerviewで使用されるレイアウトマネージャーの1つです。子を千鳥格子状にレイアウトするLayoutManagerです。水平および垂直レイアウトと、子を逆にレイアウトする機能をサポートします。

Staggered GridView:StaggeredGridViewを使用すると、Pinterestの外観に似た不均一な行を持つGridViewを作成できます。独自のOnItemClickListenerとOnItemLongClickListener、セレクター、固定位置復元が含まれています。thisの例をご覧ください。

2
Raja Jawahar

StaggeredGridlayout

  1. これは、千鳥格子状に子供を配置します。
  2. 水平および垂直レイアウトと、子を逆にレイアウトする機能をサポートします。
  3. 千鳥格子は、レイアウトの端に隙間がある可能性があります。
  4. ギャップを避けるために、StaggeredGridLayoutManagerはスパンを独立してオフセットするか、アイテムをスパン間で移動できます。 setGapStrategy(int)を介してこの動作を制御できます。

GridLayout

  1. これは、その子を長方形のグリッドに配置します。
  2. グリッドは、表示領域をセルに分割する一連の無限に細い線で構成されています。
  3. 子は、rowSpecおよびcolumnSpecレイアウトパラメーターで定義されているように、1つ以上の連続したセルを占有します。

Example of GridLayout

1
Shree Krishna

スタッガードグリッドレイアウトには、さまざまなサイズの複数の行を持つ複数の列が含まれます。

GradleのユーザーはEclipseとAntを使用するユーザーよりも簡単ですが、ヘッダーとフッターを備えた柔軟な列/行ビューが可能になり、実装がかなり簡単に見えます。これは、 Etsy Githubアプリ で開発されたビューの外観です。

一方、 GridLayout は、子を長方形のグリッドに配置するレイアウトです。

APIレベル14で導入され、最近サポートライブラリでバックポートされました。その主な目的は、他のレイアウトのアライメントとパフォーマンスの問題を解決することです。 GridLayoutの詳細については、 このチュートリアル をご覧ください。

0
Garg's