2014-12-08 11 views
6

Ciao Sto sviluppando una piccola applicazione Android in cui voglio visualizzare una semplice griglia con alcuni elementi. Funziona correttamente. L'unico problema è che mostra sempre solo due colonne anche se c'è spazio. La sua schermata equivale a dividere in 2 colonne e visualizzare solo due elementi. Se imposto il numero di colonne come numero, ad esempio non auto_fit, viene visualizzato correttamente. Il mio codice è simile:Android gridview android: numColumns = "auto_fit" crea sempre solo due colonne

<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> 

e il mio elemento della griglia assomiglia:

<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> 

Sto facendo qualcosa di sbagliato? Bisogno di aiuto. Grazie.

risposta

9

Sembra che l'impostazione di adattamento automatico si applica solo se sono state fissate larghezze di colonna. Qui è l'unico posto nel codice sorgente GridView che utilizza l'impostazione auto-fit:

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; 
     } 
    } 

Questa funzione privata viene chiamato durante il processo di misura/layout. Nota che all'interno dell'istruzione auto-fit if, a meno che non sia requestedColumnWidth > 0, ottieni solo 2 colonne, che è ciò che stai vedendo.

Se una larghezza fissa lavora per la vostra applicazione, allora avete bisogno di mettere in XML come questo:

<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

Ok ottenuto il punto e il suo funzionamento. Grazie. – nilkash

+0

puoi condividere come regoli? – Erum