[TableLayout] Probleme beim Ausrichten von 4 Spalten

  • 8 Antworten
  • Letztes Antwortdatum
T

Tersus

Gast
Hallo,

ich möchte in meinem Layout 4 Spalten und mehrere Zeilen haben.


Code:
[FONT=Courier New]
                                Mitte
                                  |
                                  |
                                  V
            |----------+----------+----------+----------|
Zeile 0 --> | spalte 0 | spalte 1 | spalte 2 | spalte 3 |
            |----------+----------+----------+----------|
Zeile 1 --> |          |          |          |          |
            |----------+----------+----------+----------|
Zeile 2 --> |          |          |          |          |
            |----------+----------+----------+----------|
[/FONT]

In den Zellen befinden sich TextViews!

Spalte 0 und Spalte 1 sollen zusammen genau die Hälfte des Bildschirmes einnehmen. Gleiches gilt für Spalte 2 und Spalte 3.

Die TextViews in Spalte 0 und Spalte 2, sollen:
so kurz wie möglich sein, aber halt so breit, wie die breiteste TextView in dieser Spalte.

Spalte 0 beginnt stets ganz links, Spalte 2 beginnt stets ab der Mitte des Bildschirms!

Spalte 1 beginnt dort, wo die breiteste Spalte 0 endet und erstreckt sich bis zur Mitte des Bildschirms.
Spalte 3 beginnt dort, wo die breiteste Spalte 2 endet und erstreckt sich bis zum Ende des Bildschirms.

Sollten Spalte 1 und/oder Spalte 3 zu viel Platz beanspruchen, werden Sie in einer zweiten Zeile weitergeführt.

Ich möchte ein sauberes Layout, welches unabhängig vom Device gleiche Ergebnisse liefert. Also nichts "dahingematschtes" mit einem RelativeLayout.
 
Zuletzt bearbeitet von einem Moderator:
Ist das ganze wirklich eine Tabelle oder eine Liste?

Weil für mich sieht das erst mal nach einer Liste aus, deren einzelne Einträge dann mit einem passenden layout.
Das problem wird sein, dass du vorher scheinbar nie weißt wie breit Spalte 0 z.B. maximal sein kann.

Erst mal könntest du 2 Layouts nebeneinander legen.
Dann hast du schon mal eine linke und eine rechte Hälfte, beide jeweils 50% breit.
 
amfa schrieb:
Ist das ganze wirklich eine Tabelle oder eine Liste?
Ja/Nein. Diese Tabelle wird eine Listenzeile, also ein Element in einer ListView. Das spielt aber gar keine Rolle.

amfa schrieb:
Das problem wird sein, dass du vorher scheinbar nie weißt wie breit Spalte 0 z.B. maximal sein kann.
Doch, denn die Texte in Spalte 0 und Spalte 2 sind immer die gleichen, bzw. wiederholen sich. Nur was in Spalte 1 und Spalte 3 steht, ist unbekannt.

amfa schrieb:
Erst mal könntest du 2 Layouts nebeneinander legen.
Dann hast du schon mal eine linke und eine rechte Hälfte, beide jeweils 50% breit.
Und genau das geht eben nicht! Mir ist keine Möglichkeit bekannt, 2 Layout fix nebeneinander zu packen, so dass diese jeweils 50% des Bildschirms einnehmen.
 
Falsch, das geht.

Dafür gibt es "android:layout_weight". Einfach 4 LinearLayout nebeneinander anordnen, und im xml bei allen die Zeile "android:layout_weight = "1"" eintragen.

Linear Layout | Android Developers
 
Nein, so einfach geht es nicht. Setze mal in eines der 4 LinearLayouts, welche mit 1 gewichtet sind, eine Textview. Das bringt gleich wieder alles durcheinander. Oder setze in jedes eine TextView unterschiedlicher Länge. Auch das bringt wieder alles durcheinander.
 
Hast du die überhaupt Doku gelesen?
Es steht doch dort wie es geht! Schon mal was von android:layout_width="fill_parent" gehört.
 
android:layout_width="fill_parent" in Verbindung mit android:layout_weight="1" sind mir im LinearLayout bekannt. Wenn ich das bei allen vier Spalten mache, nehmen diese je 1/4 der Bildschirmbreite ein. Das ist aber nicht, was ich will.

Spalte 0, soll so lang sein, wie der Inhalt in ihr benötigt, um diesen komplett sichtbar darzustellen. Spalte 0 beginnt stets ganz links und endet maximal in der Mitte des Bildschirmes.
Für Spalte 2 gilt gleiches, nur dass diese Spalte in der Mitte des Bildschirmes beginnt und bis maximal zum Ende des Bildschirmes geht.
Spalte 1 füllt mit ihrem Inhalt verbleibenden Platz, welchen die Spalte 0 bis zur Bildschirmmitte übrig läßt.
Für Spalte 3 gilt gleiches, nur dass diese den verbleibenden Platz einnimmt, den Spalte 2 übrig läßt.

Ich habe das vorerst mit zwei TableLayouts in einem LinearLayout gelöst. Leider ist dann die Zeile1 im linken TableLayout unabhängig von der Zeile 1 im rechten TableLayout. Wächst eine Zeile in die Tiefe, bekommt das die andere nicht mit. Muss ich zur Laufzeit überprüfen.
 
bei mir klappt das so wenn ich dich richtig verstehe:

Code:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="TextView längerer text" />

                <TextView
                    android:id="@+id/textView5"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="TextView" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/textView2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="TextView mit mehr text" />

                <TextView
                    android:id="@+id/textView6"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="TextView" />

            </LinearLayout>

        </LinearLayout>




</TableLayout>
 
Du hast es schon ansatzweise verstanden. Jedoch besitzt mein Layout 3 Zeilen.
Und da sollen Spalte 0 sowie Spalte 2 in jeder Zeile identische Breite haben. Jedoch aber nur so breit sein, wie halt der breiteste Eintrag.

Das erreichen wir mit meiner oben geschriebenen Methode:
2 TableLayouts nebeneinander, in deren Zeilen jeweils zwei Elemente eingefügt werden.

Jetzt gibt es noch ein Problem. Die jeweilige Zeile im linken TableLayout ist unabhängig von der jeweiligen Zeile im rechten TableLayout.
Nehmen wir Zeile 1 in beiden TableLayouts. Dehnt sich einer der Zeilen nach unten aus, folgt die andere dem nicht. Aber wie geschrieben. Das muss ich halt zur Laufzeit korrigieren.
 
Zurück
Oben Unten