私はAndroidマテリアルデザインAPIで作業しています。グリッド形式でデータを表示したいです。GridLayout
とStaggeredGridlayout
の両方を試しました。情報、私は尋ねたいGridlayout
とStaggeredGridlayout
?の違いは何ですか?
ありがとうございました。
グリッドビュー:これは、アイテムを2次元のスクロール可能なグリッドで表示するViewGroup
です。この各グリッドは同じサイズ(高さと幅)です。グリッドビューは、対称アイテムを表示します。
スタッガードグリッドビュー:基本的にはGrid View
しかし、このそれぞれグリッドはさまざまなサイズ(高さと幅)。スタッガードグリッドビューでは、非対称のアイテムが表示されます。
スタッガードグリッドビューを実装するチュートリアル:
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;
}
}
グリッドレイアウト(APIレベル14):子を長方形のグリッドに配置するレイアウト。グリッド内の行と列の数は、Android:rowCount
およびAndroid:columnCount
プロパティを使用して宣言できます。ただし、通常、列の数が宣言されている場合、GridLayoutは占有セルの数に基づいて行の数を推測し、rowCountプロパティの使用を不要にします。同様に、GridLayoutの向きは、オプションでAndroid:orientation
プロパティを介して定義できます。
別のStaggeredGridLayoutはないと思います。ここに私たちが持っているものがあります
StaggeredGridLayoutManager:これは、Recyclerviewで使用されるレイアウトマネージャーの1つです。子を千鳥格子状にレイアウトするLayoutManagerです。水平および垂直レイアウトと、子を逆にレイアウトする機能をサポートします。
Staggered GridView:StaggeredGridViewを使用すると、Pinterestの外観に似た不均一な行を持つGridViewを作成できます。独自のOnItemClickListenerとOnItemLongClickListener、セレクター、固定位置復元が含まれています。thisの例をご覧ください。
StaggeredGridlayout
StaggeredGridLayoutManager
はスパンを独立してオフセットするか、アイテムをスパン間で移動できます。 setGapStrategy(int)
を介してこの動作を制御できます。GridLayout
rowSpec
およびcolumnSpec
レイアウトパラメーターで定義されているように、1つ以上の連続したセルを占有します。スタッガードグリッドレイアウトには、さまざまなサイズの複数の行を持つ複数の列が含まれます。
GradleのユーザーはEclipseとAntを使用するユーザーよりも簡単ですが、ヘッダーとフッターを備えた柔軟な列/行ビューが可能になり、実装がかなり簡単に見えます。これは、 Etsy Githubアプリ で開発されたビューの外観です。
一方、 GridLayout は、子を長方形のグリッドに配置するレイアウトです。
APIレベル14で導入され、最近サポートライブラリでバックポートされました。その主な目的は、他のレイアウトのアライメントとパフォーマンスの問題を解決することです。 GridLayoutの詳細については、 このチュートリアル をご覧ください。