2010-11-23 11 views
1

Ich versuche Android anzeigen Struktur und ich bin ein wenig verwirrt darüber, wie zu positionieren Kind AnsichtenPosition Subviews in Android

Sagen wir, ich habe eine FrameLayout, die enthalten wird meine benutzerdefinierte Ansicht zu verstehen. Meine benutzerdefinierte Ansicht zeichnet nur ein Rechteck von 50 x 50 Pixel.

Also setze ich meine View.setMeasureDimension(50, 50); Nun, wie soll ich diese Ansicht verschieben? Ich habe ein paar Wege gefunden, es zu tun.

1: Ich könnte etwas wie canvas.drawRect(new Rect(offsetX, offsetY, right, bottom)); machen, aber das wird meine Ansicht größer machen und dadurch my measureWidth/height sind nicht mehr gültig?

2: Legen Sie das Padding für das Elternelement fest und beeinflussen Sie dadurch die left/top View.getLeft()/View.getTop(). Dies betrifft jedoch alle untergeordneten Elemente.

3: Verwenden Sie View.offsetLeftAndRight(number of pixels to move). Ich verstehe nicht ganz, was das eigentlich macht. Führt es zu einer Art von canvas.translate()? Aber auf diese Weise muss ich den Zustand beibehalten, wie oft ich offsetLeftANdRight() angerufen habe, weil das Aufrufen von offsetLeftANdRight(10) und dann offsetLeftANdRight(10) es 20px verschieben wird.

Ich bin ein bisschen verwirrt, auf welche Weise ist der "richtige" Weg, es zu tun. Gibt es einen besseren Weg?

Antwort

0

Android-Apps laufen auf Geräten unterschiedlicher Größe, mit oft völlig unterschiedlichen Bildschirmen. Aus diesem Grund sollten Sie keine absolute Positionierung oder Größenbestimmung verwenden. Wo immer möglich, erstellen Sie Ansichten und positionieren Sie sie relativ zueinander.

Sie müssen sich mit den verschiedenen Ansichten vertraut machen Android bietet Layouts zu erstellen: http://developer.android.com/guide/topics/ui/layout-objects.html

Es ist manchmal eine Menge Gedanken nimmt als Einzelteile werden unterschiedlich auf verschiedenen Geräten positioniert werden (und Orientierungen), so dass die Ansicht Beziehungen wichtiger als absolute Positionen.

Linearlayout ist eine gute Allzweckbehälter Kontrollen für die Platzierung, obwohl RelativeLayout oft effizienter ist (wenn auch ein wenig härter manchmal zu benutzen)

Nachdem die gewünschten Elemente relativ zueinander positioniert sind Sie Polsterung und Margen verwenden zwicken Sie ihre Positionen.

+0

Danke für Ihre Antwort, ich muss absolute Position, weil dies für die Laufzeit Platzierung von Objekten verwendet wird, ich bin mir auch der unterschiedlichen Bildschirmgröße und dpi bewusst, und ich werde meine Pixel nach dem DisplayMetrics normalisieren. –