CardView在RecyclerView内部对齐

时间:2015-06-30 09:49:46

标签: android android-layout

我在RecyclerView使用LinearLayoutManager,项目为CardViews。所有卡都有固定(以像素为单位)的宽度。如果重要的话,RecyclerView放在SwipeRefreshLayout内。

如何仅使用xml水平对齐每个RecyclerView项目?将android:layout_gravity="center"应用于卡片无效。

部分使用RecyclerView:

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/news_recycler_view"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:clipToPadding="false"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</android.support.v4.widget.SwipeRefreshLayout>

卡片布局:

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/card_view"
    android:layout_height="wrap_content"
    style="@style/CardStyle">

    ...
</android.support.v7.widget.CardView>

风格:

<style name="CardStyle" parent="CardView.Light">
     ...
    <item name="android:layout_marginBottom">8dp</item>
    <item name="android:layout_width">@dimen/cardview_width</item>
</style>

1 个答案:

答案 0 :(得分:4)

尝试使用gravity =&#34; center&#34;

将CardView包装在LinearLayout中
<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">                

        <android.support.v7.widget.RecyclerView
           android:id="@+id/news_recycler_view"
           android:paddingTop="16dp"
           android:paddingBottom="16dp"
           android:clipToPadding="false"
           android:layout_width="200dp"
           android:layout_height="wrap_content"/>
    </LinearLayout>

</android.support.v4.widget.SwipeRefreshLayout>

修改

我们可以尝试在linearlayout中包装一个RecyclerView的childView来实现这个效果。

我在我的RecyclerView适配器中使用这个技巧也是我自己的ViewHolders(lil片段):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:padding="10dp"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        card_view:cardUseCompatPadding="true"
        card_view:cardPreventCornerOverlap="false"
        card_view:cardElevation="5dp"
        card_view:cardCornerRadius="20dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:id="@+id/title"
                android:textStyle="bold"
                android:padding="10dp"
                android:textSize="18sp"
                android:gravity="center"
                android:background="@drawable/cardview_header"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <LinearLayout
                android:id="@+id/question_holder"
                android:padding="10dp"
                android:gravity="center"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" />
        </LinearLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>