DividerItemDecoration setDrawable获取多个形状分隔符 - 不工作

时间:2017-12-20 17:00:55

标签: android android-recyclerview

我正在修改持久性示例并向RecyclerView添加一些分隔线而不是使用CardView。如果我不自定义DividerItemDecoration,它可以工作,我得到分隔线。但是,如果我使用setDrawable自定义它,我会看到如下图所示的内容。我做错了什么?

WordListFragment.java:

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mRecyclerView = (RecyclerView) getView().findViewById(R.id.words_list);
        DividerItemDecoration divider = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL);
        divider.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.custom_divider));
        mRecyclerView.addItemDecoration(divider);


        final WordListViewModel viewModel =
                ViewModelProviders.of(this).get(WordListViewModel.class);

        subscribeUi(viewModel);
   }

custom_divider.xml:

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

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/black" />
<size android:height="1dp"/>
</shape>

enter image description here

评论出setDrawable后:

enter image description here

3 个答案:

答案 0 :(得分:0)

出于某种原因,在我做了Build,Make Project后,它似乎开始工作了。不是一个好的答案,但如果我发现更多,我会更新。

更新:在我更改了数据库版本之后,这个问题又发生了,但是又一次......我做了一个Build / Make项目,它再次运行。

答案 1 :(得分:0)

问题在于您的抽屉中的高度。尝试添加宽度。

  <size
     android:width="1dp"
     android:height="1dp" />

答案 2 :(得分:0)

您可以使用GradientDrawable设置分隔线的 size color ,而不是创建可绘制的布局:

DividerItemDecoration itemDecoration = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL);

GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{0xfff7f7f7, 0xfff7f7f7});
drawable.setSize(1,1);
itemDecoration.setDrawable(drawable);

recyclerView.addItemDecoration(itemDecoration);