在Recycler视图中自动调整图像卡片视图

时间:2015-12-18 07:38:34

标签: android android-layout android-recyclerview

我正在使用RecyclerView来显示CardView中的图像。

我使用GridLayoutManager并且我在每行中指定了3个项目:

mLayoutManager = new GridLayoutManager(context,3);

问题:我的测试设备卡片视图中的图片为perfectly fitted。但是如果我在比我的测试设备小的设备上测试它,那么cardview的右侧正在{{{} 1}}。

如果我减小了卡片视图中的宽度以适应小型设备,那么我可以在更大的屏幕中看到右侧更多的边距。

我的问题:

如何设计我的xml布局以适用于小屏幕和大屏幕?即我不希望cardview的右侧边缘在较小的设备中被修剪。

Grid_item.xml

trimmed

RecyclerView.xml

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.CardView
        android:layout_width="90dp"
        android:layout_height="wrap_content"
        card_view:cardCornerRadius="3dp"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        card_view:cardElevation="0.01dp"
        android:layout_marginBottom="0dp"
        card_view:cardBackgroundColor="#E7A423"
        >
        <RelativeLayout
            android:id="@+id/top_layout"
            android:layout_width="90dp"
            android:layout_height="120dp"
            android:background="#000000"
            android:layout_gravity="center">

            <ImageView
                android:id="@+id/img_thumbnail"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:adjustViewBounds="true"
                android:scaleType="fitXY"
                />

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

2 个答案:

答案 0 :(得分:1)

问题来自CardView的大小。小屏幕中的cardView大于RecyclerView项。您的reyclerView's item width根据recyclerWidth/yourSpanCount(代码中的3)进行计算。因此,我建议您可以为差异屏幕大小cardView使用差异大小。
要归档它,你不应该在xml:android:layout_height="120dp"中声明特定的维度。您可以更改:android:layout_height="@dimen/imageWidth"
然后你可以在额外的文件夹中声明dimens,如:values-xlarge/dimens.xmlvalues-small/dimens.xml或甚至smallest width,如果我不错过的那样。

答案 1 :(得分:0)

这可能对你有所帮助=&gt; Supporting Multiple Screens

您可以为不同的设备使用多个dimens.xml