Android - GridView不滚动

时间:2013-12-23 12:10:08

标签: android android-layout gridview scroll

我只是Android的初学者,希望在我可以改进代码的地方提出建议。

对于我们的项目,我们创建了一个网格视图,它在运行时加载用户,现在问题是它有时不滚动并且很难这样做。

我们也使用了这个网格视图,根据应用程序所需的环境使视图可见并消失。

这是我的xml文件:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <!-- Title Layout -->

    <RelativeLayout
        android:id="@+id/newGroupTitleLayout"
        android:layout_width="match_parent"
        android:layout_height="50dip"
        android:background="@drawable/topbar_bg" >

        <ImageButton
            android:id="@+id/newGroupCancelButton"
            android:layout_width="60dip"
            android:layout_height="30dip"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:background="@drawable/buttonanim_cancel_button"
            android:contentDescription="@string/todo" />

        <TextView
            android:id="@+id/setupPrefTitleTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="@string/new_group"
            android:textColor="@color/yellow"
            android:textSize="20sp" />
    </RelativeLayout>

    <!-- Group Name -->

    <LinearLayout
        android:id="@+id/groupNameLinearLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/newGroupTitleLayout"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="15dp"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/groupNameTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:text="@string/group_name"
            android:textColor="@color/yellow" />

        <EditText
            android:id="@+id/groupNameEditText"
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp"
            android:background="@drawable/full_textfield"
            android:ems="10"
            android:inputType="text"
            android:nextFocusRight="@+id/stateEditText"
            android:paddingLeft="15dp"
            android:singleLine="true" >
        </EditText>
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/addMemberLayout"
        android:layout_width="wrap_content"
        android:layout_height="290dp"
        android:layout_below="@+id/groupNameLinearLayout"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/membersbox" >

        <!-- View used when more than 1 member present -->

        <GridView
            android:id="@+id/mebersListGridView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fastScrollAlwaysVisible="true"
            android:gravity="center"
            android:numColumns="auto_fit"
            android:padding="10dp"
            android:verticalSpacing="10dp"
            android:visibility="gone" />

        <!-- View when there are no members -->

        <RelativeLayout
            android:id="@+id/zeroMembersLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true" >

            <ImageButton
                android:id="@+id/addMemeberImageButton"
                android:layout_width="90dp"
                android:layout_height="90dp"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="70dp"
                android:background="@drawable/buttonanim_addmembersmall_button"
                android:contentDescription="@string/todo" />

            <LinearLayout
                android:id="@+id/memberCountStatementTextViewtLayout"
                android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentRight="true"
                android:layout_below="@+id/addMemeberImageButton"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/this_group_has_"
                    android:textColor="@android:color/white"
                    android:textSize="19sp" />

                <TextView
                    android:id="@+id/groupMembersCount"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/_0"
                    android:textColor="@color/yellow"
                    android:textSize="20sp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/_members"
                    android:textColor="@android:color/white"
                    android:textSize="19sp" />
            </LinearLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/memberCountStatementTextViewtLayout"
                android:layout_centerHorizontal="true"
                android:text="@string/tap_to_add_friends"
                android:textColor="@android:color/white"
                android:textSize="16sp" />
        </RelativeLayout>
    </RelativeLayout>

    <!-- Create group button -->

    <ImageButton
        android:id="@+id/creategroupbutton"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_below="@+id/addMemberLayout"
        android:layout_marginBottom="15dp"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="15dp"
        android:background="@drawable/buttonanim_creategroup_button"
        android:contentDescription="@string/todo" />
</RelativeLayout></ScrollView>

有人可以帮我解决这个问题吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

滚动问题是将GridView置于ScrollView内(在您的情况下是根布局)。 ScrollView允许你垂直滚动它的孩子。 GridView也垂直滚动。所以你必须找到另一种解决方案。 使用GridView有一个缺点。它没有像ListView那样的页眉和页脚视图。因此,可能希望将GridView替换为ListView

答案 1 :(得分:0)

尝试使用ExpandableHeightGridView而不是简单的gridView:

public class ExpandableHeightGridView extends GridView{

boolean expanded = false;

public ExpandableHeightGridView(Context context)
{
    super(context);
}

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

public ExpandableHeightGridView(Context context, AttributeSet attrs,
        int defStyle)
{
    super(context, attrs, defStyle);
}

public boolean isExpanded()
{
    return expanded;
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    // HACK! TAKE THAT ANDROID!
    if (isExpanded())
    {
        // Calculate entire height by providing a very large height hint.
        // View.MEASURED_SIZE_MASK represents the largest height possible.
        int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }
    else
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

public void setExpanded(boolean expanded)
{
    this.expanded = expanded;
}}



<com.your_package_here.ExpandableHeightGridView
        android:id="@+id/mebersListGridView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fastScrollAlwaysVisible="true"
        android:gravity="center"
        android:numColumns="auto_fit"
        android:padding="10dp"
        android:verticalSpacing="10dp"
        android:visibility="gone" />

来自:this

答案 2 :(得分:0)

看不到你关闭的ScrollView标签..

 </ScrollView>

您永远不应在ScrollView中嵌套ListView或GridView,因为只要您的数据超出视图的可见区域,这两个视图都会提供滚动。