2014-12-08 55 views
6

您好我正在开发小型Android应用程序,我想显示简单的gridview与一些elements.Its正常工作。唯一的问题是,即使有空间,它总是只显示两列。它将屏幕平分为2列,只显示两个元素。如果我将列数设置为数字,即不是auto_fit,则显示正确。我的代码如下所示:Android GridView的android:numColumns =“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> 

难道我做错了什么?需要一些帮助。谢谢。

回答

9

看起来像自适应设置只适用于固定列宽的情况。这是在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; 
     } 
    } 

这个私有函数是在度量/布局过程调用。请注意,在自动拟合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> 
+0

确定了问题的实质和它的工作。谢谢。 – nilkash 2014-12-08 07:41:23

+0

可以分享你如何调整? – Erum 2017-09-28 11:31:06