2016-11-23遇到的一點(diǎn)小問(wèn)題
RecyclerView使用GridLayoutManager添加分隔線
今天為RecyclerView添加分隔線,用的GridLayoutManager耕捞,因?yàn)榭紤]列開(kāi)頭、結(jié)尾和中間距離要不一樣勺爱,不同列得區(qū)別對(duì)待,所以沒(méi)法像LinearLayoutManager那樣直接設(shè)置layout_margin或弄個(gè)View寿羞,因?yàn)橐赗ecyclerView.Adapter<RecyclerView.ViewHolder>的onBindViewHolder中寫(xiě)一堆判斷毯焕,所以用的網(wǎng)上找的自定義RecyclerView.ItemDecoration來(lái)實(shí)現(xiàn)况凉,這個(gè)網(wǎng)上一找一堆
http://www.reibang.com/p/4eff036360da
http://www.cnblogs.com/huolongluo/p/5879292.html
http://blog.csdn.net/lmj623565791/article/details/45059587
主要就是在getItemOffsets(Rect outRect, View view, RecyclerView parent, State state)
設(shè)置繪制位置谚鄙,設(shè)置時(shí)區(qū)分是否最后行和最后列,是的話位置為默認(rèn)的0刁绒,
在滑動(dòng)顯示時(shí)根據(jù)onDraw(Canvas c, RecyclerView parent, State state)
設(shè)置繪制的分隔線樣式闷营。
分隔線樣式可以通過(guò)修改Activity主題的<item name="android:listDivider">@drawable/aaa</item>
來(lái)修改,也可以通過(guò)drawable對(duì)象來(lái)修改,還可以只通過(guò)顏色和尺寸來(lái)修改傻盟。
不過(guò)這樣子還是有問(wèn)題速蕊,因?yàn)檫@個(gè)和設(shè)置margin類(lèi)似,前面正常繪制娘赴,最后一列不繪制,所以最后還是會(huì)比前面的寬一點(diǎn)點(diǎn)规哲。所以感覺(jué)還是盡量設(shè)置margin省事。
使用ContextCompat.getDrawable獲取Drawable
之前獲取Drawable都是
Drawable drawable = getResources().getDrawable(R.drawable.a);
不過(guò)這方法過(guò)時(shí)了诽表,而新方法
Drawable drawable = getDrawable(R.drawable.a);
這個(gè)點(diǎn)開(kāi)其實(shí)就是
Drawable drawable = getResources().getDrawable(R.drawable.a,getTheme());
不過(guò)兩個(gè)都是得API21才能用唉锌,每次都是
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
}else{
}
然后在看分隔線時(shí)看到別人是這樣的
Drawable drawable = ContextCompat.getDrawable(context,R.drawable.a);
是在V4包里面的android.support.v4.content
,很好竿奏,不用管版本了袄简,以后就用這個(gè)。