我在相对布局中使用GridView.我希望GridView显示
显示所有行所需的高度.但是,我只是看到了
设置时一行(layout_width = MATCH_PARENT和)
layout_height = WRAP_CONTENT.如果我将layout_height设置为一个大小
等于多行,然后我看到那些行.
显示所有行所需的高度.但是,我只是看到了
设置时一行(layout_width = MATCH_PARENT和)
layout_height = WRAP_CONTENT.如果我将layout_height设置为一个大小
等于多行,然后我看到那些行.
<?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" android:gravity="center" > <RelativeLayout android:id="@+id/layout_month" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textv_month_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clickable="false" android:gravity="center_horizontal|center_horizontal" android:textColor="#ffffff" android:textSize="7dp" /> <ImageView android:id="@+id/top_bar" android:layout_width="fill_parent" android:layout_height="15dp" android:layout_below="@+id/textv_month_name" android:background="@drawable/calendar_top_small" android:clickable="false" /> <GridView android:id="@+id/gridv_inner" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/top_bar" android:layout_gravity="center" android:clickable="false" android:gravity="center" android:numColumns="7" android:stretchMode="columnWidth" > </GridView> <Button android:id="@+id/monthBtn" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/transparent" /> </RelativeLayout> </RelativeLayout>
任何帮助都会很明显
解决方法
这是一个非常有用的答案.
当GridView放在一个垂直狭窄的空间时,它不喜欢它的高度的wrap_content;它只显示了一行项目(滚动该行中的所有内容).
我的修复程序的简短版本包括对GridView进行子类化并覆盖onMeasure方法.修复的本质集中在将测量的高度规格设置为可笑的大数字.
MyGridview.Java
package com.arun.calendar; import android.content.Context; import android.util.AttributeSet; import android.widget.GridView; public class MyGridView extends GridView { public MyGridView(Context context) { super(context); } public MyGridView(Context context,AttributeSet attrs) { super(context,attrs); } public MyGridView(Context context,AttributeSet attrs,int defStyle) { super(context,attrs,defStyle); } @Override protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) { int heightSpec; if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) { // The two leftmost bits in the height measure spec have // a special meaning,hence we can't use them to describe height. heightSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >>2,MeasureSpec.AT_MOST); } else { // Any other height should be respected as is. heightSpec = heightMeasureSpec; } super.onMeasure(widthMeasureSpec,heightSpec); } }
和新的XML文件
<?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" android:gravity="center" > <RelativeLayout android:id="@+id/layout_month" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textv_month_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clickable="false" android:gravity="center_horizontal|center_horizontal" android:textColor="#ffffff" android:textSize="7dp" /> <ImageView android:id="@+id/top_bar" android:layout_width="fill_parent" android:layout_height="15dp" android:layout_below="@+id/textv_month_name" android:background="@drawable/calendar_top_small" android:clickable="false" /> <com.arun.calendar.MyGridView android:id="@+id/gridv_inner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/top_bar" android:layout_gravity="center" android:clickable="false" android:gravity="center" android:numColumns="7" android:stretchMode="columnWidth" /> </RelativeLayout> <Button android:id="@+id/monthBtn" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/transparent" /> </RelativeLayout>
并在java文件中
MyGridView viewHolder.gridView = (MyGridView) v.findViewById(R.id.gridv_inner);