RecyclerView
ürünümüzü, düzgün çalışmakta olan 3 sayısı olan GridLayoutManger
ile düzenini ayarlayarak ızgara olarak tanımlarım. Ayrıca, grid öğeleri arasındaki boşluğu yönetecek olan geri dönüştürücü görünümüne bir öğe dekoratörünü de ekliyorum, bu da iyi çalışıyor.RecyclerView'ın ızgara öğesinin eşit yüksekliğe ve genişliğe sahip olması nasıl yapılır?
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount;
private int spacing;
private boolean includeEdge;
public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
this.spanCount = spanCount;
this.spacing = spacing;
this.includeEdge = includeEdge;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view); // item position
int column = position % spanCount; // item column
if (includeEdge) {
outRect.left = spacing - column * spacing/spanCount; // spacing - column * ((1f/spanCount) * spacing)
outRect.right = (column + 1) * spacing/spanCount; // (column + 1) * ((1f/spanCount) * spacing)
if (position < spanCount) { // top edge
outRect.top = spacing;
}
outRect.bottom = spacing; // item bottom
} else {
outRect.left = column * spacing/spanCount; // column * ((1f/spanCount) * spacing)
outRect.right = spacing - (column + 1) * spacing/spanCount; // spacing - (column + 1) * ((1f/ spanCount) * spacing)
if (position >= spanCount) {
outRect.top = spacing; // item top
}
}
}
}
benim Recycler View madde dekorasyon eklemek için My uygulaması:
mBuddiesGrid = (RecyclerView) findViewById(R.id.buddies_grid);
mLayoutManager = new GridLayoutManager(getApplicationContext(), 3);
mBuddiesGrid.addItemDecoration(new GridSpacingItemDecoration(3, (int) dpToPx(10) , true));
mBuddiesAdapter = new BuddiesGridAdapter(getApplicationContext(), new Buddies());
mBuddiesGrid.setLayoutManager(mLayoutManager);
Benim ızgara öğesi xml düzeni:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:layout_weight="1"
android:cropToPadding="false"
android:id="@+id/profile_picture"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:text="Theodore"
android:includeFontPadding="false"
android:textColor="@android:color/black"
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
ızgara öğesinin genişliğini ayarlamak olacaktır ızgara öğesi arasında boşluk ekleyerek Bu, öğe görünümümün boyut oranını alamama neden olabilir. Benim elde etmek istediğim, ızgara öğesi yüksekliğini dinamik olarak genişliğine eşitlemek. Nasıl yapabilirim?
edilir Değiştirilmiş bir özel düzen kullanarak hackish çözümü çok daha temiz. Ayrıca, düzen ağacını dinlemeye dayalı olarak düzenleri değiştirmek, çoklu düzen geçişlerine neden olabilir. –