CardView和RecyclerView分隔符行为

dzi*_*bib 2 android android-layout android-listview android-cardview android-recyclerview

我试图使用RecyclerViewCardView作为列表的单个项目.
我想实现水平列表,LayoutManager这很容易.
所以我开始实施它.似乎一切正常,但不像我预期的那样是使用CardView作为列表项的结果.

在此输入图像描述

看起来不错,但我没有设置任何衬垫,分隔线和圆角.
这是我的XML for card view项目.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:gravity="center"
       >
        <ImageView
            android:id="@+id/image_view"
            android:src="@drawable/androidsss"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentTop="true"
            android:layout_centerInParent="true"
            />
        <TextView
            android:id="@+id/info_text"
            android:layout_below="@+id/image_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:ellipsize="end"
            android:singleLine="true"
            android:textColor="@android:color/black"
            android:textSize="14sp" />
    </RelativeLayout>

</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

在布局的底部还有类似小分隔线的东西.
我没有指明任何.
这是我为RecyclerView设置的代码

 mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    mRecyclerView.setLayoutManager(mLayoutManager);
 //   mRecyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));
    mAdapter = new CardViewDataAdapter(myDataset);
    mRecyclerView.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)

有趣的事情,简单的项目,而不是卡片视图,一切都按预期工作.这是一个例子.

在此输入图像描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="150dp"
    android:layout_height="100dp"
    android:background="@android:color/white"
    >

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_centerInParent="true"
        />
    <TextView
        android:id="@+id/item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/item_image"
        android:text="Hello World !!"
        android:layout_centerInParent="true"
        android:textColor="@android:color/black"
        />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

问题出在哪里,是我的错还是错?

pau*_*lab 5

您可以看到的空间是compat paddings,它们仅在Lollipop前设备上可见(如果您设置,则可以在任何地方看到card_view:cardUseCompatPadding="true").你可以在这里找到值(CardView的doc).

在L之前,CardView会在其内容中添加填充并为该区域绘制阴影.此填充量等于两侧的maxCardElevation +(1 - cos45)*cornerRadius,顶部和底部的maxCardElevation*1.5 +(1 - cos45)*cornerRadius.

另外,据我所知,CardView角落有一些默认半径(可能是2dp).

你可以尝试任何技巧来避免这些空间或(恕我直言,它更好)考虑你是否应该 使用自定义背景,如简单的"瓦片". 在这里,您可以获得Google的一些设计信息.