0

Gridview在 Android 中有一个,其中每个元素都是从 xml 膨胀并包含一个LinearLayout持有一个ImageView和一个TextView。使用GridView扩展的自定义适配器BaseAdapter。我看到的是,每一行都和屏幕一样高,而不是仅仅高到足以容纳最大的元素。

以下是相关代码:

网格视图的 xml:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/ConSoul"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:numColumns="auto_fit"
  android:columnWidth="160dp"
  android:horizontalSpacing="20dp"
  android:verticalSpacing="0dp"
  android:gravity="center"
  android:stretchMode="columnWidth" />

元素的 xml (thumbnail.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="120dp"
  android:layout_height="wrap_content"
  android:orientation="vertical">
  <ImageView
    android:id="@+id/screen"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:scaleType="fitEnd"/>
  <TextView
    android:id="@+id/name"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:textSize="20dp"
    android:textColor="@color/theme"
    android:gravity="center_horizontal"/>
</LinearLayout>

适配器getView方法(mContext是创建适配器的实例变量,screens 是 a Bitmap[],names 是 a String[]):

public View getView(int position, View convertView, ViewGroup parent) {
    View thumbView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        thumbView = LayoutInflater.from(mContext).inflate(R.layout.thumbnail, null);
    } else {
        thumbView = convertView;
    }
    ((ImageView)thumbView.findViewById(R.id.screen)).setImageBitmap(screens[position]);
    ((TextView)thumbView.findViewById(R.id.name)).setText(names[position]);
    return thumbView;
}
4

1 回答 1

0

“wrap_content”的布局高度穿过你LinearLayout和你的ImageView. ImageView ScaleType设置为“fitEnd”,这会导致与dst 的右边缘和下边缘对齐。

这种底部对齐会导致您的 Grid 项目布局占用尽可能多的空间;整个屏幕高度。更改为其他ScaleType值之一,例如“fitStart”或“fitCenter”,您GridView应该没问题。

于 2013-04-01T00:16:20.447 回答