it-swarm.com.de

Elemente in GridView zentrieren

Ich habe GridView mit 6 Bildern in 2 Spalten. Ich möchte diese 6 Bilder in der Mitte des Bildschirms anzeigen. Ich setze die Eigenschaften der Schwerkraft so, dass diese Elemente nur horizontal zentriert werden. GridView nimmt den gesamten Bildschirm ein.

<GridView
    Android:id="@+id/gridview"
    Android:layout_above="@id/ad" Android:layout_alignParentTop="true"
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent" 
    Android:numColumns="2"    
    Android:verticalSpacing="10dp"
    Android:horizontalSpacing="10dp"
    Android:stretchMode="columnWidth"       
    Android:background="#ffffff"
    Android:gravity="center"
/>
28
bimbol

Folgendes habe ich getan, um die Elemente in der Rasteransicht zentrieren zu lassen (beachte den Dehnungsmodus, die Spaltenbreite, die Schwerkraft und den horizontalen und vertikalen Abstand):

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="horizontal"
    Android:padding="5dp" >
    <GridView
        Android:id="@+id/gridview"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:columnWidth="100dp"
        Android:gravity="center"
        Android:horizontalSpacing="10dp"
        Android:numColumns="3"
        Android:stretchMode="spacingWidthUniform"
        Android:verticalSpacing="10dp" />
</LinearLayout>

Es dauerte eine Weile, bis ich es herausgefunden hatte, aber wenn ich mich mit diesen unterschiedlichen Werten beschäftigte, gelang es mir, sie in die Mitte zu bringen.

52
Ray Hunter

Versuchen Sie, Ihre GridView in ein LinearLayout einzubinden, dessen untergeordnete Elemente zentriert sind, und ändern Sie layout_height der Rasteransicht in "wrap_content". Ex:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:layout_height="fill_parent"
  Android:layout_width="fill_parent"
  Android:gravity="center"
  Android:layout_gravity="center">
    <GridView 
      Android:id="@+id/homeGridView"
      Android:layout_width="fill_parent"
      Android:layout_height="wrap_content"
      Android:numColumns="3"
      Android:verticalSpacing="10dp"
      Android:horizontalSpacing="10dp"
      Android:stretchMode="columnWidth"
      Android:gravity="center" />
</LinearLayout>
13

Sie müssen die folgenden Attribute festlegen:

Android:stretchMode="columnWidth"

...und...

Android:gravity="center"
8
homelink

falls Sie einen benutzerdefinierten Adapter verwenden, um die Einzelzeilenansicht in Ihrem Rasteransicht aufzublasen, versuchen Sie, Android: gravity = "center" zum Layout Ihrer single_row hinzuzufügenie,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center"
    Android:orientation="vertical" >

    <ImageView
        Android:id="@+id/ivClrBlock"
        Android:layout_width="88dp"
        Android:layout_height="88dp"
        Android:layout_marginBottom="5dp"
        Android:layout_marginTop="5dp"
        />

    <TextView
        Android:id="@+id/tvClrName"
        Android:layout_width="88dp"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="5dp"
        Android:layout_marginTop="5dp"
        Android:gravity="center"
        Android:text="@string/color_name"
        Android:textSize="15sp" />

</LinearLayout>
5
ankit purwar

Problem beim Aktualisieren des gridview-Adapters von:

        gridView = inflater.inflate(R.layout.mobile, null);

zu 

        gridView = inflater.inflate(R.layout.mobile, parent, false);

also habe ich gerade einen Try-Catch rückgängig gemacht, falls die alte (null) Version fehlgeschlagen ist.

1
John Ashmore

Ich hoffe das löst dein Problem:

  <LinearLayout
        Android:layout_gravity="center_horizontal"
        Android:gravity="center"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal" >
    <GridLayout
        Android:id="@+id/gridlayou4x3"
        Android:rowCount="4"
        Android:columnCount="3"
        Android:orientation="horizontal"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="80"
        Android:minWidth="25px"
        Android:minHeight="25px" />
  </LinearLayout>
0
Hamad Al-Absi

Hier ist meine Antwort:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@id/linearLayout"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">
    <GridView
        Android:id="@+id/gridView"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:columnWidth="100dip"
        Android:gravity="center"
        Android:numColumns="3"
        Android:stretchMode="spacingWidthUniform"
        Android:verticalSpacing="10dip" />
</LinearLayout>

Verwenden Sie nicht padding oder horizontalSpacing, wenn Sie es nicht benötigen, da dies zu Problemen mit anderen Ansichten führen kann.

Beachten Sie auch, dass fill_parent bereits veraltet ist.

0
piotrek1543

Versuchen Sie das zu ändern:
Android:layout_height="fill_parent"
in
Android:layout_height="wrap_content"

Sie teilen Ihrer Rasteransicht jetzt mit, dass sie ihre übergeordnete Höhe und Breite vollständig ausfüllen soll.

0
svidnas

Ich habe festgestellt, dass Sie nur den gridlayout-Wrap-Inhalt für height und width haben. 

Android:layout_centerHorizontal="true"

Es zentriert sich für die Größe, die es benötigt, aber wenn es mit dem übergeordneten Element übereinstimmt. Sie zentrieren es technisch mit viel leerem Elternraum, der Ihre Kinder ausgleicht. 

0
Chris