淺談Android RecyclerView 間距全適配
本文介紹了Android RecyclerView 間距全適配,分享給大家,具體如下:
LinearLayoutManager spacing
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by anonymous on 2016/9/9 0009.
* <p>
* SpacesItemDecoration
* <p>
* mRecyclerView.addItemDecoration(new SpacesItemDecoration(5));
*/
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpacesItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
// Add top margin only for the first item to avoid double space between items
if (parent.getChildLayoutPosition(view) == 0) {
outRect.top = space;
} else {
outRect.top = 0;
}
}
}
使用方法很簡(jiǎn)單,上面注釋中也已經(jīng)給出:
mRecyclerView.addItemDecoration(new SpacesItemDecoration(5));
GridLayoutManager or StaggeredGridLayoutManager spacing
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by anonymous on 2016/9/9 0009.
* <p>
* GridSpacingItemDecoration
* <p>
* int spanCount = 3; // 3 columns
* int spacing = 50; // 50px
* boolean includeEdge = false;
* recyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
*/
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
}
}
}
}
此處不僅對(duì)間距進(jìn)行了處理,而且對(duì)spanCount也進(jìn)行了處理,使用方法:
int spanCount = 3; // 3 columns
int spacing = 50; // 50px
boolean includeEdge = false;
mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android13實(shí)時(shí)刷新頻率的實(shí)現(xiàn)代碼(完整代碼)
文章介紹了Android 13中如何通過設(shè)置開發(fā)者選項(xiàng)顯示屏幕刷新頻率,具體涉及到Settings應(yīng)用中的代碼和SurfaceFlinger服務(wù)的實(shí)現(xiàn),感興趣的朋友一起看看吧2025-01-01
詳解android項(xiàng)目由Gradle 2.2 切換到 3.0的坑
本篇文章主要介紹了詳解android項(xiàng)目由Gradle 2.2 切換到 3.0的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
Android短信驗(yàn)證碼監(jiān)聽解決onChange多次調(diào)用的方法
本篇文章主要介紹了Android短信驗(yàn)證碼監(jiān)聽解決onChange多次調(diào)用的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Android實(shí)現(xiàn)藍(lán)牙串口通訊
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)藍(lán)牙串口通訊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
Android小程序?qū)崿F(xiàn)個(gè)人信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Android小程序?qū)崿F(xiàn)個(gè)人信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
android實(shí)現(xiàn)raw文件夾導(dǎo)入數(shù)據(jù)庫(kù)代碼
這篇文章主要介紹了android實(shí)現(xiàn)raw文件夾導(dǎo)入數(shù)據(jù)庫(kù)代碼,有需要的朋友可以參考一下2013-12-12

