Größe von Linearlayout abfragen

  • Antworten:4
  • Bentwortet
Nils
  • Forum-Beiträge: 8

09.01.2013, 20:59:54 via Website

Hallo zusammen,

Ich arbeite an einer App: auf einer Seite tritt ein Problem auf.
Ich habe ein Layout definiert. Dieses hat eine Kopfzeile (ein LinearLayout(horizontal)) in welchem sich vier TextViews befinden. Unter der Kopfzeile folgt ein ScrollView. In diesem befinden sich nun ein Linearlayout(horizontal) und in diesem vier vertikale LinearLayouts. Diese werden später befüllt werden.
In der Befüllungsmethode werden den vier LinearLayouts gleichmäßig viele TextViews hinzugefügt.
Jetzt kommt das Problem: Ich möchte das die TextViews der Kopfzeile jeweils genauso breit sind wie die dazugehörigen Linearlayouts im ScrollView.
Ich habe das wie folgt versucht zu lösen:
1TextView t1,t2,t3,t4=findView....//kopfzeile
2LinearLayout l1,l2,l3,l4=findView ....//die Spalten
3t1.setWidth(l1.getWidth());
4t2.setWidth(l2.getWidth());
5t3.setWidth(l3.getWidth());
6t4.setWidth(l4.getWidth());
Das ganze wird direkt nach dem Befüllen aufgerufen. Die Views werden natürlich zuvor ordnungsgemäß geladen, hab das hier mal gekürzt.
Ich musste jedoch jetzt feststellen, dass ich bei getWidth für die LinearLayouts immer 0 zu diesem Zeitpunkt erhalten. Wenn ich später jedoch nochmal die Größe abfrage, erhalte ich die richtige Breite.
Wie kann ich eine Methode einrichten die aufgerufen wird sobald die LinearLayouts ihre Größe angenommen haben ohne diese nachträglich selbst zu starten?

Gruß,
Nils

PS:
Die App wird für Android 2.2 geschrieben.

Antworten
Appsoluts
  • Forum-Beiträge: 304

09.01.2013, 22:49:39 via Website

Also die width bekommst du uebrr ll.getLayoutParams().height ... aber benutzt doch layout.weight=1 bei allen 4 textviews

Antworten
Nils
  • Forum-Beiträge: 8

10.01.2013, 18:48:27 via Website

Also über getWidth() geht es auch. Aber wie kann ich es denn Einrichten, dass die Methode erst aufgerufen wird sobald die LinearLayouts nichts mehr die Breite 0 haben?
Mit Weight habe ich es auch probiert. Ich musste jedoch feststellen, dass auch die Größe der TextViews innerhalb des LinearLayouts dieses vergrößert, obwohl auch bei kleinerer Größe des LinearLayout der String komplett zu sehen wäre.

Antworten
Andreas Weichert
  • Forum-Beiträge: 287

12.01.2013, 00:02:05 via Website

Möchtest Du wirklich, das die Spalten genau die Breite wie die Titel haben oder willst Du nur alle gleich breit machen?

Für das zweite:
LayoutWidth ist schon der richtige Weg. Allerding muß man die Width explizip auf 0dp setzen, dann ist die Größe unabhängig von Inhalt (falls er nicht zu groß ist).
Früher konnte man das direkt in den Properties einstellen, sein einigen SDK Versionen ist das leider nicht mehr möglich. (Warum hat Google das rausgenommen?) Aber in der XML kann man das einstellen.
Also Du musst die Weight, und Widht der TextViews einstellen, die vertikalen LinearLayouts a besten WrapContent.
Das müßte aufgrund der Logik gehen - ohne das ich das jetzt getestet habe.

Für den 1. Fall fällt mir nur ein unschöne Zeitverzögerung ein - oder gibt es ein Event, das "Layout fertig" anzeigt als weitere Frage von mir ans Forum.

Nils

Antworten
Nils
  • Forum-Beiträge: 8

13.01.2013, 13:35:45 via Website

Danke für die Hilfe Andreas.
Wenn ich die Größe der LinearLayouts auf 0dp stellle, funktioniert es.

Antworten