Android 給RecyclerView添加分割線的具體步驟(分享)
【吐槽】RecyclerView沒(méi)有提供分割線的方法,想要加個(gè)線還要自己畫,點(diǎn)擊事件的監(jiān)聽(tīng)都要自己實(shí)現(xiàn),不過(guò)真的好用。
給RecyclerView添加分割線的步驟
1、新建類繼承于RecyclerView.ItemDecoration,此為是抽象類:
public static abstract class ItemDecoration { public void onDraw(Canvas c, RecyclerView parent, State state) { onDraw(c, parent); } public void onDrawOver(Canvas c, RecyclerView parent, State state) { onDrawOver(c, parent); } public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) { getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(), parent); } }
“onDraw和onDrawOver,顯然,這兩個(gè)方法是用于繪制的,那么繪制分割線的邏輯可以放在這里面,它們二者的具體區(qū)別是:onDraw是在item view繪制之前調(diào)用,而onDrawOver是在item view繪制之后調(diào)用,因此我們一般選擇重寫其中一個(gè)方法即可。getItemOffsets,這個(gè)方法是告訴RecyclerView在繪制完一個(gè)item view的時(shí)候,應(yīng)該留下多少空位,以便于繪制分割線。”
好像邏輯也不難,但是真的好麻煩,比如我要給我的瀑布流布局加一條系統(tǒng)自帶的分割線,系統(tǒng)自帶的就行,那我要新建一個(gè)實(shí)現(xiàn)類:
public class DividerItemDecoration extends RecyclerView.ItemDecoration { //使用系統(tǒng)自帶的listDivider private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; private Drawable mDivider; public DividerItemDecoration(Context context) { super(); // 從TypedArray中得到一個(gè)Drawable對(duì)象 final TypedArray typedArray = context.obtainStyledAttributes(ATTRS); mDivider = typedArray.getDrawable(0); typedArray.recycle(); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); drawDivider(c, parent); } /** * 遍歷childView,為每一個(gè)childView描繪divider * @param c 畫布對(duì)象 * @param parent 父控件即RecyclerView */ private void drawDivider(Canvas c, RecyclerView parent) { //獲取分割線的上邊距,即RecyclerView的padding值 final int top = parent.getPaddingTop(); //分割線下邊距 final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); //遍歷所有item view,為它們的右邊方繪制分割線,就是計(jì)算出上下左右四個(gè)值畫一個(gè)矩形 for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicWidth(); //畫右邊的divider mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); //畫完右邊畫底邊 mDivider.setBounds(child.getLeft() + child.getPaddingLeft(), child.getBottom() + params.bottomMargin, child.getRight() - child.getPaddingRight(), child.getBottom() + mDivider.getIntrinsicHeight()); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); outRect.set(0, 0, mDivider.getIntrinsicHeight(), mDivider.getIntrinsicHeight()); } }
2、為RecyclerView添加寫好的ItemDecoration即可
mRecyclerView.addItemDecoration(new DividerItemDecoration(this));
3、沒(méi)有3。
其實(shí)從 RecyclerView.ItemDecoration 的名字就看得出來(lái),它是RecyclerView的item的裝飾品,也就是說(shuō),除了畫分割線,想畫什么都是可以的。
以上這篇Android 給RecyclerView添加分割線的具體步驟(分享)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)RecyclerView添加分割線的簡(jiǎn)便方法
- Android RecyclerView實(shí)現(xiàn)水平、垂直方向分割線
- RecyclerView底部分割線去除的方法
- android中RecyclerView自定義分割線實(shí)現(xiàn)
- Android RecyclerView網(wǎng)格布局(支持多種分割線)詳解(2)
- Android中RecyclerView上拉下拉,分割線,多條目的實(shí)例代碼
- 萬(wàn)能RecyclerView分割線
- RecyclerView消除底部分割線的方法
- RecyclerView的萬(wàn)能分割線
- RecyclerView自定義分割線
相關(guān)文章
Golang+Android基于HttpURLConnection實(shí)現(xiàn)的文件上傳功能示例
這篇文章主要介紹了Golang+Android基于HttpURLConnection實(shí)現(xiàn)的文件上傳功能,結(jié)合具體實(shí)例形式分析了Android基于HttpURLConnection的客戶端結(jié)合Go語(yǔ)言服務(wù)器端實(shí)現(xiàn)文件上傳功能的操作技巧,需要的朋友可以參考下2017-03-03Android下的POS打印機(jī)調(diào)用的簡(jiǎn)單實(shí)現(xiàn)
本篇文章主要介紹了Android下的POS打印機(jī)調(diào)用的簡(jiǎn)單實(shí)現(xiàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04Android onSaveInstanceState和onRestoreInstanceState觸發(fā)的時(shí)機(jī)
這篇文章主要介紹了Android onSaveInstanceState和onRestoreInstanceState觸發(fā)的時(shí)機(jī)的相關(guān)資料,需要的朋友可以參考下2017-05-05實(shí)例講解Android中ViewPager組件的一些進(jìn)階使用技巧
這篇文章主要介紹了Android中ViewPager組件的一些進(jìn)階使用技巧,包括添加標(biāo)題與onPagerChangeListener監(jiān)聽(tīng)使用等,需要的朋友可以參考下2016-03-03Android自定義viewgroup快速滑動(dòng)(4)
這篇文章主要為大家詳細(xì)介紹了Android自定義viewgroup快速滑動(dòng)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12實(shí)例講解Android中的AutoCompleteTextView自動(dòng)補(bǔ)全組件
AutoCompleteTextView組件被用在輸入框中能實(shí)現(xiàn)輸入內(nèi)容自動(dòng)補(bǔ)全的功能,類似于大家平時(shí)用Google時(shí)的輸入聯(lián)想,這里我們來(lái)用實(shí)例講解Android中的AutoCompleteTextView自動(dòng)補(bǔ)全組件,特別是實(shí)現(xiàn)郵箱地址補(bǔ)全的例子,非常實(shí)用2016-05-05Android 監(jiān)聽(tīng)屏幕是否鎖屏的實(shí)例代碼
今天小編通過(guò)本文給大家分享android如何監(jiān)聽(tīng)手機(jī)屏幕是否鎖屏。實(shí)現(xiàn)方法很簡(jiǎn)單,需要的朋友參考下吧2017-09-09