Ich habe das a LinearLayout
mit der Breite in xml als fill_parent
gesetzt, jetzt brauche ich seine Breite zur Laufzeit programmatisch. Also habe ich das getan:
Aber width
Wert beim Debugging wurde gefunden -1
, jeder mit Idee, warum kann ich nicht die genaue Breite zur Laufzeit für LinearLayout mit fill_parent im Layout xml gesetzt.
Sie können versuchen, das globalLayout-Ereignis anzuhören und die Breite dort einzutragen. Sie erhalten wahrscheinlich die -1, weil Sie versuchen, die Breite zu erhalten, bevor die Ansichten angeordnet sind.
%Vor%(vto ist die Ansicht, für die Sie die Breite erhalten möchten)
Wenn Sie sich den Wert für FILL_PARENT
anschauen (Sie sollten MATCH_PARENT
verwenden, da FILL_PARENT
jetzt veraltet ist), werden Sie feststellen, dass der Wert -1 ist. LayoutParams
sind einfach Attribute für die Ansicht Ihrer Ansicht. Sobald die Ansicht aufgebläht ist und so aussieht, wie die Parameter angeben, kehrt die Ansicht nicht zurück und ändert diese Parameter so, dass sie die tatsächlichen Werte der Ansicht (Breite / Höhe / etc) widerspiegeln.
Wenn Sie die tatsächliche Breite Ihrer Ansicht erhalten möchten, müssen Sie getWidth()
in Ihrer Ansicht aufrufen, sobald das Layout aufgebläht und angezeigt wurde. Wenn Sie getWidth()
aufrufen, bevor Ihr Layout angezeigt wurde, wird 0 angezeigt.
Als erstes sollten Sie match_parent
anstelle von fill_parent
(veraltet) verwenden.
Wenn du int width=layParamsGet.width;
machst, nimmst du das richtige Ergebnis, das ist -1
korrespondierend bei fill_parent
.
Wenn Sie die tatsächliche Breite erhalten möchten, müssen Sie onMesure()
call warten und
Tags und Links android android-layout android-intent