2016-10-09 2 views
0

Ich habe ein einfaches Rasterlayout von 2x2. 3 von ihnen haben einen Blick auf rot, grün und blau. Ich möchte, dass sie in den Gitterzellen zentriert sind. Mein Layout ist wie unten, aber die Ansicht ist links oben ausgerichtet, auch wenn ich für alle Ansichten layout_gravity als Mitte gesetzt habe. Wie könnte ich das lösen?Wie wird die Ansicht in Rasterzellen des GridLayout-Centers ausgerichtet?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.elyeproj.griddrag.MainActivity"> 

    <GridLayout 
     android:id="@+id/container_grid" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:columnCount="2" 
     android:rowCount="2" 
     android:orientation="horizontal"> 
     <View 
      android:id="@+id/view_red" 
      android:layout_height="100dp" 
      android:layout_width="100dp" 
      android:layout_gravity="center" 
      android:background="#ff0000" /> 

     <View 
      android:id="@+id/view_green" 
      android:layout_height="100dp" 
      android:layout_width="100dp" 
      android:layout_gravity="center" 
      android:background="#00ff00" /> 

     <View 
      android:id="@+id/view_blue" 
      android:layout_height="100dp" 
      android:layout_width="100dp" 
      android:layout_gravity="center" 
      android:background="#0000ff" /> 
    </GridLayout> 
</RelativeLayout> 

Antwort

1

Die Rasterlayout-Elemente sind Umbruch, so dass Sie besser Gewicht verwenden, um sie richtig auszurichten, wie Sie möchten. unten xml ist, was Sie wollen:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<GridLayout 
    android:id="@+id/container_grid" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnCount="2" 
    android:rowCount="3" 
    android:orientation="horizontal"> 

    <View 
     android:id="@+id/view_red" 
     android:layout_height="100dp" 
     android:layout_width="100dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:layout_gravity="center" 
     android:background="#ff0000" 
     android:layout_row="0" 
     android:layout_column="0" /> 

    <View 
     android:id="@+id/view_green" 
     android:layout_height="100dp" 
     android:layout_width="100dp" 
     android:layout_columnWeight="1" 
     android:layout_gravity="center" 
     android:background="#00ff00" 
     android:layout_row="0" 
     android:layout_column="1" /> 

    <View 
     android:id="@+id/view_blue" 
     android:layout_height="100dp" 
     android:layout_width="100dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:layout_gravity="center" 
     android:background="#0000ff" 
     android:layout_row="1" 
     android:layout_column="0" /> 
    </GridLayout> 
</RelativeLayout> 

siehe den Link unten für eine andere Lösung für api unter 21 unter Verwendung von Linearlayout: GridLayout (not GridView) how to stretch all children evenly

+0

Großartig! Leider funktioniert es nur auf API21 :(. Was, wenn ich will, dass es frühere Version unterstützt? – Elye

+0

ja, für niedrigere apis müssen Sie es in Java-Code tun. Berechnen Sie nur die Größe von GridLayout und dann die Größe der Ansicht genau einstellen (nach Pixel) anstelle von Gewicht;) akzeptieren Sie die Antwort, wenn es hilfreich war –

+0

siehe diese Seite für eine bessere Lösung unter 21: http://StackOverflow.com/Questions/10016343/Gridlayout-Not-Gridview-how-to-stretch-all -Kinder-gleichmäßig –

1

hey fügen Sie einfach diese Zeilen zu jeder Ansicht.

android:layout_columnWeight="1" 
android:layout_rowWeight="1" 

Hoffe, das hilft.

+0

Großartig! Leider funktioniert es nur auf API21 :(. Was, wenn ich will, dass es frühere Version unterstützt? – Elye

+0

versuchen, dies auf API19-Gerät auszuführen, überprüfen Sie, ob es funktioniert oder nicht. Ich denke, es wird funktionieren. – Harv

Verwandte Themen