Android RecycleView(二)——添加分割线

编程入门 行业动态 更新时间:2024-10-11 09:29:38

Android RecycleView(二)——添加<a href=https://www.elefans.com/category/jswz/34/1767190.html style=分割线"/>

Android RecycleView(二)——添加分割线

     上一篇 Android RecycleView(一)完成了最最基本的recycleview的用法 这一篇,完成其分割线的设置。

recycleview 有其自己设置分割线的方法:recyclerView.addItemDecoration() 参数是我们自己定义的一个ItemDecoration通过自定义itemDecoration

我们可以根据自己的喜好来自定义分割线的样式,无论是color还是图片,或者自定义的shape。

自定义itemDecoration:

继承系统提供的RecyclerView.ItemDecoration重写onDraw或onDrawOver方法   一个实在childitem之前绘制一个是在childitem之后绘制。

package com.chs.myrecycleview.adapter;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.view.View;import com.chs.myrecycleview.R;/*** 作者:chs on 2016/2/2 15:20* 邮箱:657083984@qq*/
public class RecycleViewDivider extends RecyclerView.ItemDecoration{private Drawable drawable;public RecycleViewDivider(Context context) {drawable = context.getResources().getDrawable(R.mipmap.list_divider);drawable = context.getResources().getDrawable(R.drawable.shape);}@Overridepublic void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
//        drawVertical(c, parent);}@Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);drawVertical(c, parent);}private void drawVertical(Canvas canvas, RecyclerView parent) {int left = parent.getPaddingLeft();int right = parent.getWidth()-parent.getPaddingRight();View child;RecyclerView.LayoutParams layoutParams;int top;int bottom;int count = parent.getChildCount();for(int i = 0;i<count;i++){child = parent.getChildAt(i);layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();top = child.getBottom()+layoutParams.bottomMargin;bottom = top+drawable.getIntrinsicHeight();drawable.setBounds(left,top,right,bottom);drawable.draw(canvas);}}
//如果等于分割线的高度或宽度的话可以不重写次方法@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {if (parent.getChildPosition(view) == parent.getChildCount() - 1) {outRect.set(0, 0, 0, 0);} else {outRect.set(0, 0, 0, drawable.getIntrinsicHeight());}}
}


</pre><p></p><pre>
效果图  一个是用的图片,一个是用的自定义的一个shape

这样就实现它的分割线了 并且我们可以随意的绘制。

这种方法比较简单,但是如果我们把上述代码放到编译器中,你会发现构造方法中的

context.getResources().getDrawable(R.mipmap.list_divider); 这个方法是被废弃的一个方法。最然现在可以用,但是毕竟有风险,反正我不喜欢看到一个横杠在代码上画着。
后来发现我们可以通过改变系统属性来实现  系统属性 listDivider
  <!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="android:listDivider">@drawable/shape</item></style>
 

构造方法中改为:

   public RecycleViewDivider(Context context) {
//        drawable = context.getResources().getDrawable(R.mipmap.list_divider);
//        drawable = context.getResources().getDrawable(R.drawable.shape);TypedArray array = context.obtainStyledAttributes(new int[]{android.R.attr.listDivider});drawable = array.getDrawable(0);array.recycle();}


效果:


跟上面的效果一样而且没有被废弃的方法,还是比较完美哈哈

OK分割线已经搞定  但是我们还会发现一个让人郁闷的地方,它没有提供给我们 OnclickListener和OnLongClickListener方法

一种简单的方法我们可以去adapter中自己实现 ,下一篇在写吧~~


更多推荐

Android RecycleView(二)——添加分割线

本文发布于:2024-02-28 00:36:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767228.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分割线   Android   RecycleView

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!