在GridView

时间:2016-08-09 17:43:43

标签: android gridview

在SO中多次询问,如何删除GridView中的填充,但没有一个答案适合我。

我有GridView,并设置列数和网格布局的总宽度。需要66dp x 66dp尺寸的商品。不知何故,物品是平方的,但66x66的尺寸较小,周围有一个巨大的衬垫。为什么?

int zz = .. // number of columns comes from outside
gridview.setNumColumns(zz);
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams)gridview.getLayoutParams();
linearParams.width=66*zz;
gridview.setLayoutParams(linearParams);
<HorizontalScrollView
    android:id="@+id/horizontalScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="66dp"
    android:layout_marginRight="0dp"
    android:layout_marginLeft="108dp"
    android:layout_marginBottom="0dp">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal">

        <GridView
            android:id="@+id/gridView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="0dp"
            android:columnWidth="66dp"
            android:gravity="center"
            android:horizontalSpacing="0dp"
            android:scrollbarAlwaysDrawHorizontalTrack="true"
            android:scrollbarAlwaysDrawVerticalTrack="true"
            android:scrollbars="horizontal"
            android:stretchMode="none"
            android:verticalSpacing="0dp"
            android:listSelector="@null"
            android:scaleType="centerCrop">

        </GridView>

    </LinearLayout>

</HorizontalScrollView>

项目原型

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="66dp" android:layout_height="66dp">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="66dp"
        android:layout_height="66dp"
        android:padding="0dp"
        android:background="@android:color/holo_orange_light"/>

</RelativeLayout>

shreen shot

enter image description here

图片:enter image description here

使用适配器加载内容/图像。

@Override
public void onBindViewHolder(RatingHolder ratingHolder, int i) {

    ratingHolder.icon.setImageResource(R.drawable.asdf);
    //ratingHolder.icon.setAdjustViewBounds(true);
}

2 个答案:

答案 0 :(得分:0)

您使用的ImageView未定义scaleType

ImageView的默认值为FIT_CENTER,但可能是您使用的图片尺寸不完全符合视图宽高比。

您最有可能需要CENTER_CROP来满足您的需求

<ImageView
        android:id="@+id/icon"
        android:scaleType="centerCrop"
        android:layout_width="66dp"
        android:layout_height="66dp"
        android:padding="0dp"
        android:background="@android:color/holo_orange_light"/>

可以找到行动中所有ImageView.ScaleType值的直观示例here

答案 1 :(得分:0)

首先,您不应该使用fill_parent,它已重命名为match_parent

其次,这段代码:

LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) gridview.getLayoutParams();
linearParams.width= 66 * zz;
gridview.setLayoutParams(linearParams);

基本上是将GridView的宽度设置为wrap_content,所以请在XML中这样做。此外,如果您根据屏幕宽度设置列数,则可以更轻松地完成此操作。通过将GridView的宽度设置为match_parent,并将numColumns设置为auto_fit。或者使用integers.xml值资源,并使用资源限定符(例如valuesvalues-w600dpvalues-w840dp)为不同的屏幕宽度设置整数。

接下来,设置gravity="center"可能是您的填充问题的来源,因为该属性正试图将视图置于GridView的中心位置。

最后,您将视图包装为不必要的布局。任何View都可以作为XML的基础,您无需将它们包装在&#34; layout&#34;中。您的GridView看起来应该更像这样:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_view_1"
    android:layout_width="wrap_content" android:layout_height="match_parent"
    android:stretchMode="none" android:numColumns="@integer/column_number"/>

你的ImageView就像这样:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/icon" android:layout_width="66dp" android:layout_height="66dp"
    android:scaleType="centerCrop"/>

这些更改可能无法立即解决您的问题,但它们会为您提供更易于管理的内容。