[解決済み] Androidでgridlayoutmanagerを使用してrecyclerviewの最後の要素の下にスペーシングを追加する
2022-12-07 03:59:27
質問
の最後の要素の行の下にスペースを追加しようとしています。
RecyclerView
で
GridLayoutManager
. 私はカスタム
ItemDecoration
を使用し、その最後の要素では以下のようにボトムパディングを行います。
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
private int bottomSpace = 0;
public SpaceItemDecoration(int space, int bottomSpace) {
this.space = space;
this.bottomSpace = bottomSpace;
}
public SpaceItemDecoration(int space) {
this.space = space;
this.bottomSpace = 0;
}
@Override
public void getItemOffsets(Rect outRect, View view,
RecyclerView parent, RecyclerView.State state) {
int childCount = parent.getChildCount();
final int itemPosition = parent.getChildAdapterPosition(view);
final int itemCount = state.getItemCount();
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
outRect.top = space;
if (itemCount > 0 && itemPosition == itemCount - 1) {
outRect.bottom = bottomSpace;
}
}
}
しかし、この方法の問題は、最後の行のグリッドの要素の高さを台無しにしたことです。私が推測するところでは
GridLayoutManager
は、左のスペーシングに基づいて要素の高さを変更します。これを達成するための正しい方法は何ですか?
これは
LinearLayoutManager
. ただ
GridLayoutManager
はその問題があります。
がある場合に非常に便利です。
FAB
があり、最後の行のアイテムが上にスクロールする必要がある場合に便利です。
FAB
を表示する必要があります。
どのように解決するのですか?
この問題の解決策は、GridLayoutManagerのSpanSizeLookupをオーバーライドすることにあります。
RecylerViewを膨らませているActivityやFragmentでGridlayoutManagerを変更する必要があります。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//your code
recyclerView.addItemDecoration(new PhotoGridMarginDecoration(context));
// SPAN_COUNT is the number of columns in the Grid View
GridLayoutManager gridLayoutManager = new GridLayoutManager(context, SPAN_COUNT);
// With the help of this method you can set span for every type of view
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (list.get(position).getType() == TYPE_HEADER) {
// Will consume the whole width
return gridLayoutManager.getSpanCount();
} else if (list.get(position).getType() == TYPE_CONTENT) {
// will consume only one part of the SPAN_COUNT
return 1;
} else if(list.get(position).getType() == TYPE_FOOTER) {
// Will consume the whole width
// Will take care of spaces to be left,
// if the number of views in a row is not equal to 4
return gridLayoutManager.getSpanCount();
}
return gridLayoutManager.getSpanCount();
}
});
recyclerView.setLayoutManager(gridLayoutManager);
}
関連
-
[解決済み] Androidでファイルをダウンロードし、ProgressDialogで進捗を表示する。
-
[解決済み] Android Studioにライブラリプロジェクトを追加する方法を教えてください。
-
[解決済み】Android Studioです。jarをライブラリとして追加しますか?
-
[解決済み】RecyclerViewで横長のListViewを構築する方法
-
[解決済み】Android Recyclerview GridLayoutManagerの列間隔について
-
[解決済み】RecyclerViewとGridLayoutManagerを使ったAndroidの簡単なグリッド例(昔のGridViewのようなもの)。
-
[解決済み] onCreate(Bundle savedInstanceState)とは?
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] RecyclerView GridLayoutManager: スパン数を自動検出する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Recyclerview GridLayoutManagerの列間隔について
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] Android Debug Bridgeでアプリケーションのインストール時にINSTALL_FAILED_VERSION_DOWNGRADEを無視する方法はありますか?
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?