GridView的回报只有一行 [英] Gridview return only one row
问题描述
我使用的是的GridView 在相对布局。我想在的GridView 显示 高达根据需要显示所有的行一样高。但是,我只看到 当设置一排( layout_width = MATCH_PARENT 和) layout_height = WRAP_CONTENT 。如果我设置layout_height到大小 等于多张行,然后我看到这些行。
I am using a GridView in a Relative layout. I want the GridView to show up as tall as needed to show all the rows. However, I am seeing only one row when set (layout_width=MATCH_PARENT and) layout_height=WRAP_CONTENT. If I set layout_height to a size that equals mulitple rows, then I do see those rows.
<?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>
任何帮助将AP preciable
Any Help will be appreciable
推荐答案
这是一个非常有用的答案。
This is a very useful answer.
的GridView的不喜欢它,当它被放置在垂直方向狭小的空间高度的WRAP_CONTENT;它仅表现的项目的单排(滚动在于单列的所有内容)。
The GridView didn’t like the wrap_content of its height when it was put in a vertically tight space; it only showed a single row of items (scrolling all content in that single row).
短的版本我修复包括子分级GridView和覆盖onMeasure方法。此修复程序的精髓集中在测量高度规范设置为一个大得离谱的数字。
The short version of my fix includes sub classing the GridView and overriding the onMeasure method. The essence of the fix focuses on setting the measured height spec to a ridiculously large number.
MyGridview.Java
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);
这篇关于GridView的回报只有一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!