嗨,我正在开发一个小型android应用程序,在其中我要显示一些元素的简单gridview.It正常工作。唯一的问题是,即使有空间,它也始终只显示两列。它平均将屏幕分为两列并仅显示两个元素。如果我将列数设置为数字,即不是auto_fit,则显示正确。我的代码如下所示:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
 >
<GridView
    android:id="@+id/gridView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="5dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp">
</GridView>
</FrameLayout>

我的网格元素看起来像:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context="com.example.androidcardlayout.MainActivity" >

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="100dp"
    android:layout_height="150dp"
    card_view:cardCornerRadius="4dp">

    <RelativeLayout
        android:id="@+id/cardMianRlt"
        android:layout_width="100dp"
        android:layout_height="150dp"
        >
    </RelativeLayout>



我做错什么了吗?需要一些帮助。谢谢你。

最佳答案

看起来自动调整设置仅在您具有固定的列宽时才适用。这是GridView源代码中唯一使用自动调整设置的位置:

private boolean determineColumns(int availableSpace) {
    final int requestedHorizontalSpacing = mRequestedHorizontalSpacing;
    final int stretchMode = mStretchMode;
    final int requestedColumnWidth = mRequestedColumnWidth;
    boolean didNotInitiallyFit = false;

    if (mRequestedNumColumns == AUTO_FIT) {
        if (requestedColumnWidth > 0) {
            // Client told us to pick the number of columns
            mNumColumns = (availableSpace + requestedHorizontalSpacing) /
                    (requestedColumnWidth + requestedHorizontalSpacing);
        } else {
            // Just make up a number if we don't have enough info
            mNumColumns = 2;
        }
    }

在度量/布局过程中将调用此私有(private)函数。请注意,在自动拟合if语句中,除非使用requestedColumnWidth > 0,否则您只会看到2列,即所看到的。

如果固定宽度适用于您的应用,那么您需要像这样将其放入XML中:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
    <GridView
        android:id="@+id/gridView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="5dp"
        android:numColumns="auto_fit"
        android:columnWidth="30dp"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp">
    </GridView>
</FrameLayout>

09-11 19:14
查看更多