如何为gridView的所有项目设置相同的大小?

时间:2014-03-18 08:56:07

标签: android android-layout android-gridview

我有一个gridview,对于每个项目我有一个imageview有3个textView s,我的问题是我使用wrap_ content作为项目的大小,所以我所有物品的大小都相同。我的gridview代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@drawable/back_ground">
    <GridView

            android:id="@+id/gridView2"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_weight="2.0"
            android:alwaysDrawnWithCache="true"
            android:columnWidth="@dimen/grid_column"

            style="@style/grid_space"
            android:drawSelectorOnTop="false"
            android:numColumns="auto_fit"
            android:persistentDrawingCache="animation|scrolling"
            android:scrollbars="none"
            android:stackFromBottom="false"
            android:stretchMode="columnWidth"
            android:verticalSpacing="48dp">
    </GridView>
</LinearLayout

我的项目代码:

<RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@drawable/round_boutton"
        android:orientation="vertical"
        android:padding="5dp">
    <ImageView
            android:layout_height="96dp"
            android:id="@+id/imageView1"
            android:layout_width="96dp"
            android:src="@drawable/icon"
            android:layout_marginTop="15dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true">
    </ImageView>
    <TextView
            android:text="TextView"

            android:id="@+id/textView1"

            android:layout_below="@+id/imageView1"
            android:layout_marginTop="4dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
             android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textColor="@color/orangemil"
            android:paddingTop="4dp"
            android:textSize="14dip"


            android:gravity="center_horizontal|center_vertical"></TextView>

    <TextView android:text="  "
              android:id="@+id/textView2"
              android:layout_marginTop="10dp"
              android:layout_marginLeft="15dp"
              android:layout_marginRight="15dp"
              android:layout_below="@+id/textView1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textColor="@color/white"></TextView>

    <TextView android:text="   "
              android:id="@+id/textView3"
              android:layout_marginLeft="15dp"
              android:layout_marginRight="15dp"
              android:layout_below="@+id/textView2"
              android:layout_width="wrap_content"
              android:layout_marginBottom="15dp"
              android:layout_height="wrap_content"
              android:textColor="@color/white"></TextView>
    <View
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:layout_below="@+id/textView3"
            android:background="@android:color/transparent"/>
</RelativeLayout>

我尝试使用固定大小:

gridView.setLayoutParams(new GridView.LayoutParams(150,150)); //dimension in px

2 个答案:

答案 0 :(得分:1)

如果你要添加imageview?然后 像这样制作动态图像视图

public class DynamicImageView extends ImageView {

    public DynamicImageView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
        final Drawable d = this.getDrawable();

        if (d != null) {
            // ceil not round - avoid thin vertical gaps along the left/right edges
        final int width = MeasureSpec.getSize(widthMeasureSpec);
        final int height = (int) Math.ceil(width * (float) d.getIntrinsicHeight() / d.getIntrinsicWidth());
            this.setMeasuredDimension(width, height);
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
}

并像

一样实现它
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >


    <this.is.packagename.DynamicImageView
        android:id="@+id/grid_item_image"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="3dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_launcher" />


    <TextView
        android:id="@+id/grid_item_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/grid_item_image"
        android:layout_centerHorizontal="true"
        android:padding="4dp"
        android:text="Medium Text"
        android:textColor="@color/black" 
         android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

通过这种方式,您将得到相同大小的imageview,以及指定的列数

  <GridView
            android:id="@+id/gridView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/frameLayout1"
            android:background="@color/white"
            android:numColumns="3" >
        </GridView>

如果您遇到任何实施问题,请向我询问

答案 1 :(得分:0)

将你的textview放在如下的linearlayout中,它可以解决你的问题

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="5dp" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="15dp"
    android:layout_marginRight="15dp"
    android:layout_marginTop="15dp"
    android:src="@drawable/ic_launcher" >
</ImageView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/imageView1"
    android:layout_marginLeft="15dp"
    android:layout_marginRight="15dp"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:gravity="center_horizontal|center_vertical"
        android:paddingTop="4dp"
        android:singleLine="true"
        android:text="TextView1"
        android:layout_weight="1"
        android:textSize="14dip" >
    </TextView>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_weight="1"
        android:text="TextView2" >
    </TextView>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_weight="1"
        android:text="TextView3" >
    </TextView>

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@android:color/transparent" />
</LinearLayout>