我正在努力
RecyclerView
在 CardView
中显示图像。我使用
GridLayoutManager
并且我在每行中指定了3个项目:
mLayoutManager = new GridLayoutManager(context,3);
问题: 图像在我的测试设备的卡片视图中为
perfectly fitted
。但是如果我在比我的测试设备小的设备中测试它,卡片视图的右侧会变得 trimmed
。如果我减少卡片视图的宽度以适应小型设备,那么我可以在较大的屏幕中看到右侧有更多的边距。
我的问题:
如何设计我的 xml 布局以同时适用于小屏幕和大屏幕?即我不希望卡片视图的右侧边缘在较小的设备中被修剪。
Grid_item.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>
RecyclerView.xml
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/seperator"
android:columnWidth="100dp"
android:padding="10dp"/>
问题来自于你的
CardView
的大小。小屏幕中的 cardView
比 RecyclerView
的项目更大。您的 reyclerView's item width
是根据 recyclerWidth/yourSpanCount
计算的(在您的代码中为 3)。因此,我建议您可以使用不同的尺寸来实现不同的屏幕尺寸。为了实现这一点,您不应该在 xml 中声明特定的尺寸:cardView
。您可以更改如下:
android:layout_height="120dp"
。
然后你可以在额外的文件夹中声明
android:layout_height="@dimen/imageWidth"
dimens
,values-xlarge/dimens.xml
,甚至可以使用values-small/dimens.xml
,如果我没记错的话。