2016-05-05 22 views
0

Ich habe ein TableLayout, das nur eine Zeile und eine Zelle enthält. Ich möchte den Inhalt meiner Zelle horizontal zentriert sein. Ich habe versucht, zwei Ansätze:Android TableLayout und horizontale Schwerkraft

Erste Methode, habe ich das Attribut android: Schwerkraft = „center_horizontal“ auf dem TableRow Element und es funktioniert wie erwartet:

<?xml version="1.0" encoding="utf-8"?> 
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <TableRow android:gravity="center_horizontal"> 
      <Button 
       android:id="@+id/MyButton" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"    
       android:text="@string/Hello" /> 
     </TableRow> 
    </TableLayout> 

Zweite Methode, habe ich das Attribut android: layout_gravity = "center_horizontal" direkt auf dem Zellinhalt (die Schaltfläche hier) aber das bedeutet nicht die Mitte der Taste:

<?xml version="1.0" encoding="utf-8"?> 
     <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
      <TableRow> 
       <Button 
        android:id="@+id/MyButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"    
        android:layout_gravity="center_horizontal" 
        android:text="@string/Hello" /> 
      </TableRow> 
     </TableLayout> 

Kann mir jemand erklären, warum der zweite Ansatz nicht funktioniert?

Danke

Riana

Antwort

0

android:gravity innerhalb der Blick auf das Kind Inhalt bezieht. In Ihrem Fall wirkt sich dies auf den Inhalt der Tabellenzelle aus.

android:layout_gravity bezieht sich auf die Platzierung der Ansicht in ihrem übergeordneten Element. In diesem Fall die Platzierung der Zelle in der Tabelle, aber nicht die Zelleninhalte. Der Inhalt der Zelle wird NICHT beeinflusst.

Sehen Sie diese ähnliche Frage für einige andere Beispiele und weitere Erklärung: Gravity and layout_gravity on Android

+0

Hallo und vielen Dank für Ihre Antwort. In meinen Beispielen verstehe ich, warum der erste Ansatz funktioniert. Was nicht klar ist, warum der zweite fehlschlägt. Das auf die Schaltfläche angewendete Attribut layout_gravity sollte die Schaltfläche in der übergeordneten Ansicht (der TableRow) zentrieren. –

+0

Ich verstehe nicht, wie dies nicht klar ist. Die Gravitation bezieht sich auf den Child-Inhalt der Tabellenzelle. Layout_gravity ist für die Platzierung der Tabellenzelle selbst in ihrem Elternteil. Genau wie in der Antwort erklärt. – joshgoldeneagle

+0

In meinem Beispiel ist der Button das untergeordnete Element von TableRow. Wenn ich das "Gravity" -Attribut auf der TableRow setze, zentriert das seinen Inhalt, hier die Schaltfläche. Aber wenn ich das Attribut "layout_gravity" auf dem Button setze, erwarte ich, dass es sich auch innerhalb seines Containers, d. H. Dem TableRow, zentriert. Ich möchte die "Schwerkraft" auf den Container setzen oder "layout_gravity" auf den Inhalt sollte das gleiche Verhalten haben. Ich hoffe, ich bin klarer .. –