今天发现在activity中RecyclerView设置AddItemDecoration能正常显示,但在Fragment中不能正常显示了,有人说是setLayoutManager和DividerItemDecoration中传的contetxt原因,测了下不管用。后来发现是RecyclerView.ItemDecoration中drawHorizontalLine和drawVerticalLine的问题,改了下后发现可以正常显示了。
代码如下:

public class DividerItemDecoration extends RecyclerView.ItemDecoration {    private static final int[] ATTRS = new int[]{            android.R.attr.listDivider    };    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;    private Drawable mDivider;    private int mOrientation;    public DividerItemDecoration(Context context, int orientation) {        final TypedArray a = context.obtainStyledAttributes(ATTRS);        mDivider = a.getDrawable(0);        a.recycle();        setOrientation(orientation);    }    public void setOrientation(int orientation) {        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {            throw new IllegalArgumentException("invalid orientation");        }        mOrientation = orientation;    }    @Override    public void onDraw(Canvas c, RecyclerView parent) {        if (mOrientation == VERTICAL_LIST) {            drawVertical(c, parent);        } else {            drawHorizontal(c, parent);        }    }    public void drawVertical(Canvas c, RecyclerView parent) {        final int left = parent.getPaddingLeft();        final int right = parent.getWidth() - parent.getPaddingRight();        final int childCount = parent.getChildCount();        for (int i = 0; i < childCount; i++) {            final View child = parent.getChildAt(i);            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int top = child.getBottom() + params.bottomMargin;            final int bottom = top + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    public void drawHorizontal(Canvas c, RecyclerView parent) {        final int top = parent.getPaddingTop();        final int bottom = parent.getHeight() - parent.getPaddingBottom();        final int childCount = parent.getChildCount();        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.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    @Override    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {        if (mOrientation == VERTICAL_LIST) {            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());        } else {            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);        }    }}

Fragment中这样设置

RecyclerView recyclerView = (RecyclerView) root.findViewById(R.id.recycler_view);        recyclerView.setHasFixedSize(true);        recyclerView.setItemAnimator(new DefaultItemAnimator());        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));        recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));

更多相关文章

  1. Android中EditText属性
  2. 设置TextView文字居中
  3. android颜色设置
  4. 【攻克Android(安卓)(13)】Menu 菜单
  5. Android中文API(97)―― ContextMenu
  6. 如何设置Activity全屏显示和没有Title
  7. Android中取消GridView & ListView默认的点击背景色
  8. Android(安卓)实现不同样式风格的CharSequence
  9. Android(安卓)录音

随机推荐

  1. Android应用程序四大组件
  2. android 控制屏幕亮度
  3. android实现自定义相机以及图片的水印
  4. Android中UI设计的一些技巧!!!
  5. Android通过OpenSL ES播放音频套路详解
  6. 【实习周记】Android(安卓)getevent.c源
  7. EditText中android:inputType="number"遇
  8. 【Android】实现动态显示隐藏密码输入框
  9. Android实现数据存储技术
  10. Android(安卓)Menu