【问题标题】:Android - GridView not scrollingAndroid - GridView 不滚动
【发布时间】:2013-12-23 12:10:07
【问题描述】:

我只是一个 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>

谁能帮我解决这个问题?

感谢您的帮助。

【问题讨论】:

    标签: android android-layout gridview scroll


    【解决方案1】:

    滚动问题是将GridView 放入ScrollView (在您的情况下是根布局)的结果。 ScrollView 允许你垂直滚动它的孩子。 GridView 也垂直滚动。所以你必须找到另一个解决方案。 使用GridView 有一个缺点。它没有像ListView 这样的页眉和页脚视图。所以可能想用ListView 替换GridView。

    【讨论】:

    • 不完全是,我希望自己有一个网格视图。您提到的观点是正确的,因为父滚动视图将消耗屏幕上的滚动动作,而子视图可能无法获取滚动事件。好的,谢谢你的建议。
    • 您可以使用 ListView 并使其功能几乎类似于 GridView。 GridView 的每一行都可以成为 ListView 的一个子节点。
    【解决方案2】:

    尝试使用 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

    【讨论】:

      【解决方案3】:

      看不到你的结束 ScrollView 标记..

       </ScrollView>
      

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

      【讨论】:

      • 不错的观察。其实我没有忘记。不幸的是,它不会出现在你面前。我已经编辑了内容,使其可见。感谢您的建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多