GridView中的ImageViews占用了大量的空间

时间:2016-07-21 14:50:05

标签: java android xml gridview

我想在ImageViews内的GridView内进行调整。我为ImageViews编写了一个自定义XML,这是一个为GridView扩展ArrayAdapter的自定义Java类。

以下是我的活动初始化我的GridView

private GridView gridView;
private CustomGridViewImage customGridViewImage;

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_checkout2);

        init();
        handleClick();

        gridView = (GridView) findViewById(R.id.gridView);
        gridView.setAdapter(customGridViewImage);

以下是自定义适配器

package in.juspay.ec.sdk.activities;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;

import in.juspay.ec.sdk.*;

/**
 * Created by stpl on 21/7/16.
 */
public class CustomGridViewImage extends ArrayAdapter<Integer>{

    private Context context;
    private Integer[] imageArray;

    public CustomGridViewImage(Context context, int resource, Integer[] imageArray)
    {
        super(context, resource, imageArray);
        this.context = context;
        this.imageArray = imageArray;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }

    public View getCustomView(int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View cell = inflater.inflate(R.layout.custom_gridview_image, parent,false);


        ImageView imageView = (ImageView) cell.findViewById(R.id.custom_gridview_imageView);
        imageView.setImageResource(imageArray[position]);

        return cell;
    }
}

在ImageView的自定义XML

之后
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:padding="5dp"
    android:gravity="center_horizontal">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/custom_gridview_imageView"
        android:scaleType="fitCenter" />

</LinearLayout>

最后,GridLayout的 XML

    <GridView
       android:background="#e8bc9e"
       android:id="@+id/gridView"
       android:layout_marginTop="30dp"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:numColumns="2"
       android:columnWidth="50dp"
       android:horizontalSpacing="5dp"
       android:stretchMode="spacingWidthUniform">
   </GridView>

我试图得到这样的东西

this

但我最终得到了这个

enter image description here

如您所见,每个网格单元在ImageView之后占用了大量的空间。那么我哪里出错?

感谢您的时间!!

2 个答案:

答案 0 :(得分:0)

因为您在自定义布局中为ImageView的容器(LinearLayout)指定了50dp x 50dp。并告诉GridView使其成为2列。因此,您的图像很小,其余部分都填充了背景颜色。 您可以删除自定义布局中的LinearLayout部分,并仅放置宽度为:match_parent,height:match_parent的图像视图。或者更改LinearLayout的宽度和宽度。高度为“match_parent”。

答案 1 :(得分:0)

尝试以下方法:

仅使用此替换 自定义XML for ImageView (删除LinearLayout)

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/custom_gridview_imageView"
        android:scaleType="fitCenter" />

从那时起,使用填充调整ImageView的大小,这会将ImageView调整为其容器。