Android gridview android:numColumns =“auto_fit”始终只创建两列

时间:2014-12-08 06:50:39

标签: android gridview

您好我正在开发小型Android应用程序,其中我想显示简单的gridview与一些元素。它工作正常。唯一的问题是,即使有空间,它总是只显示两列。它将屏幕划分为2列并仅显示两个元素。如果我将列数设置为数字,即不是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>

    

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

1 个答案:

答案 0 :(得分:14)

看起来自动调整设置仅适用于固定列宽的情况。以下是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;
        }
    }

在度量/布局过程中调用此私有函数。请注意,在auto-fit 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>