本文介绍了Gridview 只返回一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在相对布局中使用了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 showup as tall as needed to show all the rows. However, I am seeing onlyone row when set (layout_width=MATCH_PARENT and)layout_height=WRAP_CONTENT. If I set layout_height to a size thatequals 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>

任何帮助都是可观的

推荐答案

这是一个非常有用的答案.

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 只返回一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-26 00:54