Layout: statische statt relativer Werte

K

Knoxxx

Fortgeschrittenes Mitglied
0
Hallo,

ich hätte gern folgenden Code in statischen Werten. Aber ich weiß nicht wie das funktioniert. Momentan arbeite ich noch mit relativen Werten (left=60dp etc)...

verrutscht6.png

Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/Button02"
        android:layout_width="150dp"
        android:layout_height="75dp"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignParentRight="true"
        android:layout_marginRight="60dp"
        android:text="Button" />

    <Button
        android:id="@+id/button1"
        android:layout_width="150dp"
        android:layout_height="75dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="60dp"
        android:layout_marginTop="69dp"
        android:text="Button" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:src="@drawable/pfeilrechts" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:src="@drawable/pfeillinks" />

</RelativeLayout>
 
Wieso möchtest du mit statischen Werte arbeiten?
Wie dem auch sei benutzt einfach px
 
Hallo Knoxxx,

ich würde dir auch eher abraten statische Pixel zu nehmen.
Vielleicht kannst du hier ja mal beschreiben, warum du es machen möchtest. Dann kann man gemeinsam diskutieren, ob es Sinn macht, oder nicht.
 
Weil das gepostete Layout bei einem 3,2" Gerät bspw gut aussieht. Aber wenn ich den gleichen Code für ein 3,3" Gerät benutze rücken die Buttons etwas nach links und alles sieht assymetrisch aus. Ich dachte, das liegt daran, dass ich relative Werte nutze?
 
Also ich habe jetzt deinen Code importiert und konnte kein Problem finden, bei mir hat es immer den gleichen Abstand vom Rand.
Ich habe das AlignBaselign mal mit einem top ausgetauscht. Vielleicht kannst du das testen.

Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/Button02"
        android:layout_width="150dp"
        android:layout_height="75dp"
        android:layout_alignParentRight="true"
        android:layout_marginRight="60dp"
        android:layout_marginTop="69dp"
        android:text="Button" />

    <Button
        android:id="@+id/button1"
        android:layout_width="150dp"
        android:layout_height="75dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="60dp"
        android:layout_marginTop="69dp"
        android:text="Button" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:src="@drawable/abc_btn_check_material" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:src="@drawable/abc_btn_check_material" />

</RelativeLayout>
 
Der Abstand zum Rand bleibt gleich, das stimmt. Aber der Abstand zur vertikalen Mittellinie wird mit steigender Zoll-Größe größer. Die Buttons und Pfeile rücken also mehr und mehr nach außen, was irgendwann nicht mehr gut aussieht. Bei 3,2" und 3,3" geht es noch. Ab 3,4" sieht es schon komisch aus. Ich will also, dass die Buttons und Pfeile proportional gesehen den gleichen Abstand zum Rand und zur vertikalen Mittellinie haben...
 
Weil die dp Units nun mal quantisiert sind das heißt es gibt keinen laufenden Übergang, keine Zwischenwerte. Ab einer bestimmten Größe(ich schätze ab 4") springt er wohl auf die neue dp einheit und stellt es wiederum richtig dar.
 
Du könntest aber zur Laufzeit in onCreate die Größe des Displays ermitteln und dort die Angaben dann über LAyouparams den jeweiligen Views(imageview, button) zuweisen mit setMargins()
 
screens-ranges.png
 
Ich habe es immer noch nicht ganz verstanden, was du machen möchtest, aber ich glaube weightSum und layout_weight sind hier richtig.

Ich habe mal dein Beispiel darauf hin verändert.
Wenn du jetzt die unteren Image Views anders positionieren willst, dann kannst du sie in den 50% des Bildschirms positionieren.

Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="69dp"
        android:weightSum="2">

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <Button
                android:id="@+id/button1"
                android:layout_width="150dp"
                android:layout_height="75dp"
                android:layout_centerHorizontal="true"
                android:text="Button" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <Button
                android:id="@+id/Button02"
                android:layout_width="150dp"
                android:layout_height="75dp"
                android:layout_centerHorizontal="true"
                android:text="Button" />

        </RelativeLayout>


    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:weightSum="2">

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="150dp"
                android:layout_height="100dp"
                android:layout_centerHorizontal="true"
                android:src="@drawable/abc_btn_check_material" />

        </RelativeLayout>


        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">


            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="150dp"
                android:layout_height="100dp"
                android:layout_centerHorizontal="true"
                android:src="@drawable/abc_btn_check_material" />

        </RelativeLayout>

    </LinearLayout>


</RelativeLayout>
 
Jaiel schrieb:
Du könntest aber zur Laufzeit in onCreate die Größe des Displays ermitteln und dort die Angaben dann über LAyouparams den jeweiligen Views(imageview, button) zuweisen mit setMargins()

Das würde ich nur dann machen, wenn es sonst keine andere Möglichkeit gibt. Macht nämlich unter umständen ziemlich viel Arbeit...
 
Ja wenn man sich die Mühe machen möchte. Ich würde einfach eine Methode schreiben wo man über einfache Schnittstellen die gewünschten Positionen in Prozent angibt plus die dazugehörige view . Dann wäre die sache gegessen.
 
Für prozentuale Werte sind die LinearLayouts mit WeightSum von Google erstellt worden. Und nach MVC dort auch auf jedenfall besser aufgehoben.
Ok, man könnte eine eigene CustomView dafür bauen und wir wären wieder bei MVC, aber warum bauen, wenn es schon WeightSum und layout_weight gibt?
 
Vielen Dank für die Antworten!
@Kardroid: Der Code läuft gut...Meine Absicht war es anstatt der Buttons zwei Bilder zu haben (eine Art Fotoalbum). Wenn ich die Buttons durch Bilder ersetze (durch den gleichen Code), rutschen die Bilder aber etwas zu weit nach unten. Wie bekomme ich die denn höher ohne dp-Werte?
Fotoalbum.png
 
Hallo Knoxxx,

ich verstehe deine Frage nicht so ganz.
Meinst du, dass das rechte Bild ein wenig tiefer ist, als das linke? Oder meinst du die paar Pixel beim linken Bild, wo man noch den Button oben im Hintergrund sehen kann?
 
ach so nee, ich meine, dass beide Bilder etwas zu tief liegen. Also zu nah an den Pfeilen. Sie müssten beide etwas nach oben gerückt werden, so dass sie zwischen dem oberen Bildschirmrand und den Pfeilen liegen. Mit den Buttons hat das nichts zu tun. Die lösche ich noch, habe ich noch nicht gemacht.
 
Hi,

das könnte auch über WeightSum gelöst werden, aber warum solltest du das nicht die dp in android:layout_marginTop="69dp" vom ersten LinearLayout kleiner machen können?
 
Ja stimmt, das klappt. Ich dachte man arbeitet nicht mit relativen Werten, wenn das Layout für verschiedene Zollgrößen passen soll. Aber es klappt ja doch. Super. Eine Frage hätte ich aber noch. Den Abstand der Bilder zum äußeren Rand kann man ja innerhalb des LinearLayout über android:layout_width verändern. Allerdings verändert das (sowie auch die Funktion MarginLeft/Right) immer die Position beider Bilder. Ich möchte jetzt aber, dass nur das rechte Bild ein wenig mehr in die Mitte rückt und das linke Bild bleibt wo es ist. Geht das auch?
 
Zuletzt bearbeitet:
Ich glaube die Antwort ist wieder uber die Weigthsum. Sagen wir mal das rechte soll etwas näher an der Mitte sein sagen wir 40% vom rechten Rand und das linke 25% vom Linken Rand dann würde ich jeden Bild die reziproke Weightsum der anderen in Prozent angegeben Posiiton geben:

rechtes Bild= 1/0.25=4 und
linkes Bild=1/0.4=2.5

Ich hoffe es ist richtig so!
 
Ich habe jetzt mal diesen Code für ein 3,2" 3,3" und 3,4" - Gerät benutzt. Und nun ist es so, dass mit steigender Zollgröße die Bilder (Rosen) sich mehr und mehr vom Rand entfernen.. Es ist also so, dass die Bilder mit steigender Displaygröße nach innen rücken und die Pfeile weiter nach außen...da entsteht also auch wieder eine Asymmetrie mit steigender ZollGröße. Ich wollte ja eigtl, dass die App auf allen Bildschirmen gleich proportional aussieht...
 

Ähnliche Themen

5
Antworten
22
Aufrufe
1.414
590239
5
R
  • RalfKahl
Antworten
10
Aufrufe
287
RalfKahl
R
Zurück
Oben Unten