【问题标题】:ImageViews inside GridView take up insane amount of spaceGridView 中的 ImageView 占用了大量空间
【发布时间】:2016-07-21 14:50:04
【问题描述】:

我正在尝试将ImageViews 放入GridView 中。我为ImageViews 编写了一个自定义XML,这是一个为GridView 扩展ArrayAdapter 的自定义Java 类。

以下是我的 Activity 初始化我的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;
    }
}

遵循自定义 XML 用于 ImageView

<?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>

我正在尝试得到这样的东西

但我最终得到了这个

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

感谢您的宝贵时间!!

【问题讨论】:

  • 对于 ImageView 的 ScaleType 将其设置为 centercrop。或者在适配器类编程中修复单元格尺寸

标签: java android xml gridview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试以下方法:

    用这个替换您的 ImageView 的自定义 XML(删除 LinearLayout)

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

    从那时起,用 padding 调整 ImageView 的大小,这会将 ImageView 调整到它的容器。

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      相关资源
      最近更新 更多