Breite einer View in Laufzeit bekommen

  • Antworten:4
Maximilian O
  • Forum-Beiträge: 990

16.06.2011, 14:57:04 via Website

Hallo Leute,
ich habe ein Layout, welches auf fill parent gestellt ist. Das ist dafür gut um herauszufinden wie viel Platz zur Verfügung steht. Danach möchte ich die Breite (jeweils prozentual) anpassen.
Nur leider bekommt man in der onCreate, onResume und in der onPostResume immer 0 als Breite, da die Views ja noch nicht gezeichnet sind.
Meine derzeitige Lösung (zu der ihr mir verholfen habt :-) ):
1Handler h = new Handler();
2 h.postDelayed(new Runnable() {
3
4 @Override
5 public void run() {
6 // TODO Auto-generated method stub
7 final LinearLayout improvementBar = (LinearLayout) findViewById(R.id.improvement_bar);
8 int width = improvementBar.getWidth();
9 width = max*width/intent;
10 improvementBar.setLayoutParams(new RelativeLayout.LayoutParams(width,improvementBar.getHeight()));
11
12 }
13 }, 100);

Funktioniert auch, ist aber nicht sonderlich schön, da es oft nicht passt mit den 100ms. Gibt es denn keine andere Lösung die Breite einer View zu bekommen?
MfG Maximilian

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

16.06.2011, 15:26:40 via App

Wenn du die gesamte Breite willst, kannst du auch ein 'Display' Objekt benutzen. Ich glaub das lief irgendwie über den DisplayManager..
Lg Ansgar

Antworten
Maximilian O
  • Forum-Beiträge: 990

16.06.2011, 15:31:56 via Website

Danke, aber ich brauche leider nur die Breite der View. Links und rechts daneben sind noch andere Elemente.
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

16.06.2011, 15:35:35 via App

Achso, ok.
Hast du es schonmal mit mehr, als 100ms probiert? (Irgendwann dauerts dann aber auch zu lang)
Lg Ansgar

Antworten
Maximilian O
  • Forum-Beiträge: 990

16.06.2011, 15:40:02 via Website

Ja habe ich leider auch schon. Nur das Problem ist, bei manchen dauert es eben länger bevor der Code abgelaufen ist, wenn ich es dann auf über 1 sekunde stelle, ist es wie du schon gesagt hast zu lang. Da der User dann sieht wie sich die Breite wechselt.
Komisch das es in der onPostResume nicht da ist, eigtl. wird es doch nach der onCreate erstellt oder?

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten