2010-12-07 3 views
3

Nachdem ich einige Stunden gesucht hatte, konnte ich die genaue Antwort auf meine Situation nicht finden. Ich verwende derzeit ein RelativeLayout und alles, was ich habe, ist ein Hintergrundbild und eine Schaltfläche. Das Problem, das ich habe, ist, den Knopf an der genauen Stelle zu platzieren, die ich es haben möchte (ein wenig versetzt von der Mitte).Wie wird die absolute Position eines Bildes oder einer Schaltfläche festgelegt, so dass sie über mehrere Bildschirmgrößen hinweg konsistent ist?

Mein erster Versuch war es, die layout_margins der Schaltfläche zu ändern. Während dies für den aktuellen Emulator funktionierte, mit dem ich arbeitete (3,7 Zoll WVGA), war die Positionierung des Knopfes leicht/weg für eine andere Bildschirmgröße (wie 3,2 Zoll HVGA).

Ich habe dann versucht, das Padding des übergeordneten Layouts zu ändern, aber das gleiche Problem. Meine XML sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:paddingLeft="98dip" android:paddingBottom="68dip" android:background="@drawable/background"> 
    <Button android:id="@+id/starttimer" 
      android:background="@drawable/button" 
      android:layout_width="wrap_content" android:clickable="true" android:layout_height="wrap_content" android:layout_alignParentBottom="true"/> 
</RelativeLayout> 

Bitte lassen Sie mich wissen, ob ich völlig weg mit meinem Ansatz bin. Es scheint ein sehr einfaches Problem zu sein, und ich bin enttäuscht, dass ich so lange gebraucht habe, um es zu bekommen. Danke für jede Hilfe!

+0

Haben Sie versucht, absolute Layout? – Sandy

+1

Nein, nur weil ich gelesen habe, dass es nicht empfohlen wird. Bitte korrigieren Sie mich, falls ich falsch liege. – marcuspfister

Antwort

2

Ich nehme an, dass Sie die Schaltfläche auf der Unterseite des übergeordneten Elements mit einem kleinen Offset zentrieren möchten, versuchen Sie layout_centerHorizontal dann fügen Sie Ihren bevorzugten Rand hinzu.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:paddingLeft="98dip" android:paddingBottom="68dip" android:background="@drawable/background"> 
    <Button android:id="@+id/starttimer" 
      android:background="@drawable/button" 
      android:layout_width="wrap_content" android:clickable="true" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android_marginLeft="5dp"/> 
</RelativeLayout> 
+0

Andreas & Sandy - Ich schätze die super schnellen Antworten. Leider scheint das Problem immer noch zu bestehen, dass sich die Position auf verschiedenen Bildschirmgrößen ändert. Nach dem Hinzufügen der Eigenschaft layout_centerHorizontal werden meine horizontalen Ränder nicht mehr wirksam. – marcuspfister

+0

yep das ist zu erwarten, hm, es ist nicht zu empfehlen, aber versuchen Sie es mit px für Ihre Padding/Margin statt dip. –

+0

@andreas - Ich habe es eine Chance gegeben und ironisch, meine aktuelle Layout wurde vermasselt, aber es behoben eine andere Bildschirmgröße, die ich hatte Probleme mit;). – marcuspfister

0

Absolutes Layout wird für absolute Positionen des Steuerelements verwendet.

+4

da es veraltet ist, können Sie immer FrameLayout mit layout_gravity = "top | left" verwenden und dann Ihre Artikel marginTop ad marginLeft geben, die Ihren (x, y) Koordinaten entsprechen. In jedem Fall natürlich auf differen scren mit verschiedenen DPI wird es ein bisschen anders, das'was dp (zuverlässige Pixel) bedeutet ... Sie können px verwenden oder Ihre eigene Berechnung relativ zur Bildschirmgröße in onLayout machen, wenn es nicht ist genug. – codeScriber

+2

@codeScriber: Danke für Ihre Eingabe. Ich überlege mir, verschiedene Layouts für verschiedene Bildschirmgrößen zu erstellen und unterschiedliche Dip-Werte für jeden zu verwenden. Wäre das eine gute Idee? – marcuspfister

Verwandte Themen