Android Fragment erhalten Breite
Ich habe ein layout mit 3 Fragmenten:
<LinearLayout android:id="@+id/acciones"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/fragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:id="@+id/fragment2"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:id="@+id/f3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</LinearLayout>
</LinearLayout>
In das erste fragment habe ich ein TableLayout, in dem ich eine benutzerdefinierte TextView in jeder Zeile.
Ich möchte wissen, die Breite des fragments, weil, wenn die benutzerdefinierte TextView ist breiter als das fragment, ich werde legen Sie die Anzahl der Zeilen erforderlich.
Dies ist, was ich getan habe in meinem custom TextView:
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mMaxWidth = (float) (getMeasuredWidth());
}
Mit dieser Zeile bekam ich die Breite von den drei Fragmente, nicht nur das eine enthält die benutzerdefinierte TextView.
Dank.
InformationsquelleAutor gutiory | 2012-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage sein, die Breite der TextView zu werden fill_parent, in welchem Fall es tun die Verpackung für Sie. Sie sollten nicht legen Sie die Breite Ihres layouts match_parent, da es ineffizient ist, wenn Sie mit layout-GEWICHTE.
Da die android-layout-system ist gelegentlich geheimnisvoll mit Bezug auf Größen, wenn die Einstellung der TextView Breite fill_parent eigentlich macht es den gesamten Bildschirm belegen (wie deine Frage scheint zu implizieren), tun Sie den folgenden:
Stellen Sie Ihre TextView Breite standardmäßig auf 0. Im onCreate deiner Aktivität nach der Einstellung Inhalte anzeigen:
Durch die Einstellung der TextView die Breite auf 0 zunächst, verhindern Sie die änderung der Breite der Fragmente. Dann können Sie mit einem view-Baum Beobachter, um die Breite fragment von was auch immer Sie interessiert sind, die (nach seinen root-view) nach layout aufgetreten ist. Schließlich können Sie Ihre TextView zu sein, die genaue Breite und die wiederum tun die Verpackung für Sie automatisch.
Beachten Sie, dass onGlobalLayout kann mehrfach aufgerufen werden und wird regelmäßig aufgerufen, bevor alle Ansichten wurden komplett verlegt, also das != 0 überprüfen. Sie werden auch wahrscheinlich wollen, zu tun, irgendeine Art von stellen Sie sicher, dass Sie nur legen Sie die Breite der text-Ansicht oder in sonst man kann in einer unendlichen layout-Schleife (nicht das Ende der Welt, aber nicht gut für die performance).
+1 nette Antwort.
Ich habe diese Hörer und gib mir die Breite und Höhe meiner fragment, aber es funktioniert nicht zeichnen, meine Inhalte in den Bildschirm, so können Sie mit diesem problem helfen
InformationsquelleAutor Sam Judd