Android相对布局高度不遵循GridView高度

7
我在一个ScrollView中的RelativeLayout内部使用GridView遇到了问题。问题是RelativeLayout的高度没有跟随GridView的内容高度而变化。当有多行时,GridView会被剪切并出现滚动条,这是不可取的。我尝试使用Android层次结构查看器的截图来说明我的问题。您可以看到红色RelativeLayout框已经剪切了GridView的第二行。我粘贴了页面(page.xml)和单个网格项(griditem.xml)的XML布局。我在gridAdapter代码中使用以下代码来填充网格项:

/***********开始网格适配器片段**********************/

public View getView(int position, View convertView, ViewGroup parent)
{

     View v;
        if(convertView==null){
            li = LayoutInflater.from(mContext);
            v = li.inflate(R.layout.griditem, null);

            //code for fetching textView and imageUrl content   

            TextView tv = (TextView)v.findViewById(R.id.icon_text);
            tv.setText(textContent);
            ImageView iv = (ImageView)v.findViewById(R.id.icon_image);

            //code for fetching and attaching image to imageView
        }
        else
        {
            v = convertView;
        }
        return v;
}

/***********网格适配器代码片段的结尾**********************/

/***********开始page.xml**********************/

<TextView android:id="@+id/title" android:layout_weight="1"

        android:layout_width="320dip"
        android:layout_height="wrap_content" 
        android:singleLine="false"
        android:textStyle="bold" 
        android:textSize="14dip" 
        />

<ImageView android:id="@+id/image"
        android:layout_below="@+id/title"
        android:adjustViewBounds="true"
        android:layout_width="128dip"
        android:layout_height="96dip" 
        android:layout_marginRight="4dip"
        />


<TextView android:id="@+id/name" 
        android:layout_weight="1"
        android:layout_below="@+id/title"
        android:layout_toRightOf="@+id/image"
        android:layout_width="192dip"
        android:layout_height="wrap_content"
        android:paddingTop="2dip"
        android:textSize="12dip" 
        android:paddingLeft="2dip"
        />

<TextView android:id="@+id/location" 
        android:layout_weight="1"
        android:layout_below="@+id/name"
        android:layout_toRightOf="@+id/image"
        android:layout_width="192dip"
        android:layout_height="wrap_content"
        android:paddingTop="2dip"
        android:textSize="12dip" 
        android:paddingLeft="2dip"
        />

<TextView android:id="@+id/date1" 
        android:layout_weight="1"
        android:layout_below="@+id/location"
        android:layout_toRightOf="@+id/image"
        android:layout_width="192dip"
        android:layout_height="wrap_content"
        android:paddingTop="2dip"
        android:textSize="10dip" 
        android:paddingLeft="2dip"
        />          

<TextView android:id="@+id/date2" 
        android:layout_weight="1"
        android:layout_below="@+id/date1"
        android:layout_toRightOf="@+id/image"
        android:layout_width="192dip"
        android:layout_height="wrap_content"
        android:paddingTop="2dip"
        android:textSize="10dip" 
        android:paddingLeft="2dip"
        />


<Button android:id="@+id/button1"
        android:text="buttonText1"
        android:layout_weight="1"
        android:layout_below="@+id/image"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginLeft="96dip"       
        />

<Button android:id="@+id/button2"
        android:text="buttonText2"
        android:layout_weight="1"
        android:layout_below="@+id/image"
        android:layout_toRightOf="@+id/button1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        />

<Button android:id="@+id/button3"
        android:text="Text"
        android:layout_weight="1"
        android:layout_below="@+id/image"
        android:layout_toRightOf="@+id/button2"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        />

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/gridview"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:layout_below="@+id/button1"
        android:layout_weight="1"

        android:numColumns="auto_fit"
        android:verticalSpacing="10dip"
        android:horizontalSpacing="10dip"
        android:stretchMode="columnWidth"
        android:gravity="center"
        />

/***********End page.xml**********************/

/***********开始 griditem.xml**********************/

android:gravity="center_horizontal">

/***********End griditem.xml**********************/

请问如何使 RelativeLayout 的高度跟随 gridView 的完整长度?

谢谢, Kuntal![alt text][1]

以下是截图: http://tinypic.com/r/98rs4n/4


你似乎仍然没有展示griditem.xml的内容,这可能是你问题的主要原因。 - stealthcopter
4个回答

4

到目前为止,我唯一能想到的解决方法有点折中。

一旦你知道要加载到网格中的项目数量,你就可以手动设置高度:

final int gridWidth = myGrid.getWidth();
final int cellWidthDP = 50;
final int cellHeightDP = 80;

final Resources r = getResources();
final double cellWidthPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, cellWidthDP, r.getDisplayMetrics());
final double cellHeightPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, cellHeightDP, r.getDisplayMetrics());

final int itemsPerRow = (int) Math.floor((double) gridWidth / cellWidthPx);
final int rowCount = (int) Math.ceil((double) itemCount / itemsPerRow);

final LayoutParams prm = myGrid.getLayoutParams();
prm.height = (int) Math.ceil((double) rowCount * cellHeightPx);

myGrid.setLayoutParams(prm);

0

0

非常抱歉,但是上一个代码片段没有正确显示。因此我再次粘贴:

android:gravity="center_horizontal">


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接