getWidth() gibt 0 zurück

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

27.05.2011, 20:06:41 via Website

Hallo liebe Community,
es gibt ja die Methode .getWidth(), welche mir aber für jede View, nur 0 zurück gibt. Ist ja eigentlich auch logisch, da die Views ja noch nicht richtig da sind. Aber wann kann ich die Breite denn abfragen, in der onCreate, onStart und onResume gibt es immer 0.
Könnt ihr mir nen Tipp geben?
MfG maximilian

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

Antworten
L3322
  • Forum-Beiträge: 467

27.05.2011, 20:41:47 via App

Ein bisschen Code wäre nicht schlecht

"Hard work beats talent, when talent fails to work hard"

Antworten
Maximilian O
  • Forum-Beiträge: 990

27.05.2011, 21:27:12 via Website

Klaro, gerne doch :-)

1final LinearLayout improvementBar = (LinearLayout) findViewById(R.id.improvement_bar);

So, nun möchte ich gerne die Breite des Layouts bekommen. Ganz einfach mit der Methode:
1int width = improvementBar.getWidth();

Die width ist aber in der onCreate, oder onStart/ onResume genau 0. Nun habe ich das Ganze mal in einem onClickListener ausprobiert, und siehe da, ich bekomme als width 448. Also genauso wie es sein soll.
Nur benötige ich die width schon in der onCreate. Ist das möglich?
MfG

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

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

27.05.2011, 22:06:09 via Website

Mein erster Versuch wäre dann sowas in der Art:

1Handler h = new Handler();
2 h.postDelayed(new Runnable() {
3 @Override
4 public void run() {
5 // hier den Code für die Breite einfügen
6 }
7 }, 100);

im onCreate().

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

28.05.2011, 16:33:52 via Website

Maximilian O.
Die width ist aber in der onCreate, oder onStart/ onResume genau 0. Nun habe ich das Ganze mal in einem onClickListener ausprobiert, und siehe da, ich bekomme als width 448. Also genauso wie es sein soll.
Nur benötige ich die width schon in der onCreate. Ist das möglich?

Zum onCreate ist das nicht möglich, da Deine View da noch nicht gerendered wurde und somit zu diesem Zeitpunkt tatsächlich noch keine Breite hat. Ich nehma mal an Du brauchst die Breite auch nicht unbedingt zum onCreate, sondern bevor Du eine andere Aktion im Verlauf Deines App-Lebenszyklus ausführen möchtest. Da hilft es dann nur eine Methode wie von anddev beschrieben zu nehmen.

Vielleicht reicht es Dir ja aber auch schon zu wissen wie breit der Bildschirm denn generell ist. Wenn Deine View das einzige Element in Deinem Layout ist erhält sie dann ja eh volle Bildschirmgröße.

Das geht wie folgt:

1DisplayMetrics metrics = new DisplayMetrics();
2getWindowManager().getDefaultDisplay().getMetrics(metrics);
3
4float dp = getResources().getDisplayMetrics().widthPixels;
5
6final float scale = getResources().getDisplayMetrics().density;
7int i = (int) (dp / scale + 0.5f);

Jetzt hast Du in der Variable dp die Breite des Displays in Pixel, in der Variable scale die Dichte des Bildschirms, und in der Variable i die Breite des Bildschirms in "density independent pixel" (das brauchst Du z.B. um die maximale Breite einer Anzeige für admob festzulegen.

Antworten
Maximilian O
  • Forum-Beiträge: 990

28.05.2011, 17:42:16 via Website

Danke ihr beiden! Hat alles perfekt geklappt.
MfG

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

Antworten