Probleme mit der Positionierung im Tablelayout

  • Antworten:4
Jochen Z
  • Forum-Beiträge: 51

01.02.2011, 18:43:34 via Website

Hallo zusammen,

ich bin noch relativ neu mit dem Thema Android Entwicklung. Vermutlich mach ich etwas grundsätzliches Falsch.

Ich habe ein TableLayout in XML Definiert.
1<TableLayout
2 android:id="@+id/abgabeTable"
3 android:layout_width="fill_parent"
4 android:layout_height="wrap_content"
5 android:stretchColumns="1">
6
7 </TableLayout>

Im Code werden bei dieser Tabelle nun dynamisch Reihen hinzugefügt. Jede Reihe hat dabei 3 Spalten. Das ganze passiert wie folgt:

1TableLayout layout = (TableLayout) this.parent.findViewById(R.id.abgabeTable);
2layout.removeAllViews();
3
4for (...) {
5 TableRow row = new TableRow(this);
6
7 TextView datum= new TextView(this.parent);
8 datum.setText( ..);
9
10 TextView spiel= new TextView(this.parent);
11 spiel.setText( ..);
12
13 TextView tipp= new TextView(this.parent);
14 tipp.setText( ..);
15
16 row.addView(datum);
17 row.addView(spiel);
18 row.addView(tipp);
19
20 layout.addView(row);
21}
22
23 row.addView(datum);
24 row.addView(spiel);
25 row.addView(tipp);

Das funktioniert soweit. Da in Spalte zwei ein Text mehrzeilig angezeigt wird, ist die gesamte Reihe auch recht Hoch. In Spalte 3 ist es nur ein kleiner Text, der am besten Mittig in der Vertikalen angezeigt werden soll. Und geanu das ist das Problem.

Egal welche LayoutParams ich dem textfeld zuweise, es ist jedesmal nicht sichtbar. Es verschwindet komplett!

Im folgenden Bild sieht man die fertige Tabelle. Es geht dabei um die TextView die das 2:1 anzeigt. Diese hängt nun recht weit oben. Ich hätte sie gern vertikal Mittig in der Reihe.

Aber wie gesagt, immer wenn ich die layoutParams setze, wird die ganze TextView nicht mehr angezeigt (bzw. ist ausserhalb des Bildschirms ...). Das 2:1 ist nicht mehr zu sehen.



Folgendes führt z.B. dazu, dass die TextView mit dem 2:1 nicht mehr zu sehen ist.
1LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
2p.gravity = Gravity.RIGHT;
3tipp.setLayoutParams(p);


Weiß jemand, wie man das Brett vor meinem Kopf lösen kann?

— geändert am 01.02.2011, 18:44:45

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

02.02.2011, 10:47:12 via Website

Versuch das mal:

1tipp.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

Gruß
Harald

Antworten
Jochen Z
  • Forum-Beiträge: 51

02.02.2011, 17:34:19 via Website

Danke für die Antworten!

Das Brett ist wohl gelöst ;)

@Harald: mit setGravity(..) wird der inhalt der jeweiligen View positioniert und nicht die View selber. Daher funktionierte das so nicht. Allerdings ist mir dadurch eingefallen wie simpel man das Problem lösen kann. Indem man einfach die Gravity der TableRow setzt. In Kombination mit der gravity auf der TextView ist der Text nun Mittig. Vielen Dank dafür.

So funktioniert es:
1tipp.setGravity(Gravity.CENTER_HORIZONTAL);
2row.setGravity(Gravity.CENTER_VERTICAL);

@Rafael: Gibt es eine Möglichkeit, die Unit bei einem Padding o. ä. mit anzugeben? Im XML geht dies ja recht einfach, aber im Java Code wird der Wert immer als Pixel interpretiert.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

02.02.2011, 18:41:03 via Website

@Rafael: Gibt es eine Möglichkeit, die Unit bei einem Padding o. ä. mit anzugeben? Im XML geht dies ja recht einfach, aber im Java Code wird der Wert immer als Pixel interpretiert
.

Indem du diese mit der Screendensity mutliplizierst ;)

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten