為RecyclerView新增精美的分割線

2021-07-31 21:52:43 字數 2976 閱讀 5499

最近由於需求問題,需要寫乙個列表。以前總是使用listview,從來沒有用過recyclerview。所以這次打算嘗試一下。然後就開始動手幹活了。recyclerview布局寫好了。然後寫adapter,一切正常。

recyclerview.additemdecoration(new divideritemdecoration(context,divideritemdecoration.vertical));
接下來,你需要在res目錄下drawable的資料夾裡面新建乙個divider.xml檔案。名字你可以按你自己的喜好來設定。

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:shape="rectangle">

android:color="@color/gray"/>

android:height="0.1dp"/>

shape>

我這裡gray是#d0d0d0,大家也可以自己修改。

再然後,你需要在values資料夾裡面的styles檔案裡面新增這樣一行**。

name="android:listdivider">@drawable/divideritem>

好,寫到這裡。大功告成。先執行一下看看效果。

嗯?突然發現最後一行資料的下面也有分割線,這樣不太美觀。接下來我們繼續修改。

聰明的小夥伴可能已經知道怎麼修改了。答案就是前面提到的divideritemdecoration這個類。我們進去看看。

public

class

divideritemdecoration

extends

recyclerview.itemdecoration ;

private drawable mdivider;

/*** current orientation. either or .

*/private

int morientation;

private

final rect mbounds = new rect();

/*** creates a divider that can be used with a

* .*

*@param context current context, it will be used to access resources.

*@param orientation divider orientation. should be or .

*/public

divideritemdecoration(context context, int orientation)

/*** sets the orientation for this divider. this should be called if

* changes orientation.

**@param orientation or

*/public

void

setorientation(int orientation)

morientation = orientation;

}/**

* sets the for this divider.

**@param drawable drawable that should be used as a divider.

*/public

void

setdrawable(@nonnull drawable drawable)

mdivider = drawable;

}@override

public

void

ondraw(canvas c, recyclerview parent, recyclerview.state state)

if (morientation == vertical) else

}@suppresslint("newapi")

private

void

drawvertical(canvas canvas, recyclerview parent) else

final

int childcount = parent.getchildcount();

for (int i = 0; i < childcount; i++)

canvas.restore();

}@suppresslint("newapi")

private

void

drawhorizontal(canvas canvas, recyclerview parent) else

final

int childcount = parent.getchildcount();

for (int i = 0; i < childcount; i++)

canvas.restore();

}@override

public

void

getitemoffsets(rect outrect, view view, recyclerview parent,

recyclerview.state state) else }}

裡面有這樣乙個方法drawvertical,沒錯它就是在這個方法裡面迴圈的繪製每一條分割線的。所以我們只需要將for迴圈裡面的i

為recyclerview新增懸浮view

recyclerview中列表一般使用linearlayoutmanage,其中linearlayoutmanage有方法findviewbyposition position 和findfirstvisibleitemposition,他可以分別用來獲取你指定position的view和第乙個顯示...

為RecyclerView新增分割線

由於recyclerview並沒有支援divider這樣的屬性,所以就需要我們自己去實現。這裡主要實現第二種 建立類繼承及recyclerview.itemdecoration public class myitemdecoration extends recyclerview.itemdecora...

給RecyclerView新增頭部

最近開發的時候遇到乙個問題,就是scrollview巢狀recyclerview的時候,在高版本的的手機上執行的時候整個頁面是可以正常滾動的,但是在低版本手機上執行的時候recyclerview以上的內容就不會顯示出來了,整個頁面只有recyclerview,並且充滿了整個螢幕,recyclervi...