2013-12-13 12 views
13
<ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/titleBarBG" 
     android:layout_alignParentLeft="true" > 

    <RelativeLayout 
     android:id="@+id/scrollContent" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     > 

    <GridView 
     android:id="@+id/issueList" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/archiveTitle" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:background="@drawable/customshape" 
     android:numColumns="3" 
     android:overScrollMode="never" 
     android:scrollbars="none" > 
    </GridView> 

</RelativeLayout> 
</ScrollView> 

Ich möchte eine Gridview erstellen, die wie eine Tabelle funktioniert. Beispielsweise wird die Größe des Rasters erhöht, wodurch die Rasteransicht größer wird. Anstatt den zusätzlichen Inhalt zu verstecken, möchte ich die Rasteransicht zeigen Sie alle Inhalte und erweitern Sie die Höhe, wenn es zusätzlichen Inhalt gibtGridview zeigen entsprechend der tatsächlichen Höhe innerhalb der Bildlaufansicht

Wie dies zu implementieren? Dank

+0

Warum soll das Scrolling nicht vom GridView bereitgestellt werden? Welche Scroll-Funktionen gibt Ihnen die ScrollView, dass die GridView nicht? – Nilzor

+0

Danke, das einzige Problem ist die Höhe der gridview sollte Erhöhung sein, wenn die Anzahl der Artikel in ihm – user782104

+2

erhöht wird Sie könnten die Suche nach [ExpandableHeightGridView] [1] [1]: http: // Stackoverflow .com/questions/8481844/gridview-height-cuts/8483078 # 8483078 – Nilzor

Antwort

21
public class MyGridView extends GridView { 

    public MyGridView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyGridView(Context context) { 
     super(context); 
    } 

    public MyGridView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, 
       MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, expandSpec); 
    } 
} 
+1

Sie sollten ein bisschen erklären. –

+0

großartige Arbeit. bitte erkläre. Danke –

+0

Gute Arbeit dude ... Vielen Dank für diesen Code Ich versuche viele, aber ich habe nichts gefunden, endlich habe ich dieses Dankeschön wieder gefunden –

3

Dies ist die Version von leicht gereinigt: Grid of images inside ScrollView

WrappedGridView.java:

/** 
* Use this class when you want a gridview that doesn't scroll and automatically 
* wraps to the height of its contents 
*/ 
public class WrappedGridView extends GridView { 
    public WrappedGridView(Context context) { 
     super(context); 
    } 

    public WrappedGridView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public WrappedGridView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // 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(); 
    } 
} 

in einem XML-Layout einschließen möchten Ihnen eine Gridlayout. Verwenden Sie einen Adapter, um Ansichten bereitzustellen.

Soweit ich das beurteilen kann, ist dies die einfachste derzeit verfügbare Lösung. In dem Framework, das das Wrapping behandelt, ist keine andere Ansicht verfügbar. Es wäre schön, wenn jemand eine elegante, automatisch sortierende Tabellenansicht bereitstellen würde. Die Änderung für diesen Zweck ist keine schlechte Idee.

Alternativ kann eines der 'FlowLayout' Projekte akzeptabel sein. Es gibt android-flowlayout und FlowLayout. Diese sind ein wenig flexibler als ein einfaches Gitter und, ich nehme an, ein wenig weniger effizient. Sie sollten ihnen auch keinen Adapter zur Verfügung stellen müssen.

Verwandte Themen