Ich versuche, zwei Knöpfe (mit Bildern, die gut funktionieren) nebeneinander anzuordnen und horizontal zu zentrieren. Das habe ich bisher:
<LinearLayout Android:orientation="horizontal" Android:layout_below="@id/radioGroup"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal|center">
<Button
Android:id="@+id/allow"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/radioGroup"
Android:layout_gravity="center_horizontal"
Android:drawableLeft="@drawable/accept_btn"
Android:text="Allow"/>
<Button
Android:id="@+id/deny"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toRightOf="@id/allow"
Android:layout_below="@id/radioGroup"
Android:layout_gravity="center_horizontal"
Android:drawableLeft="@drawable/block_btn"
Android:text="Deny"/>
</LinearLayout>
Leider sind sie immer noch auf der linken Seite ausgerichtet. Jede Hilfe wird geschätzt! Yves
Bearbeiten :
Leider funktionieren bisher keine Kommentare oder Vorschläge. Deshalb versuche ich jetzt mit einem RelativeLayout ein vereinfachtes, vollständiges Layout zu erstellen:
<?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="wrap_content"
Android:layout_centerHorizontal="true">
<TextView Android:text="@+id/TextView01" Android:id="@+id/TextView01"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"/>
<Button
Android:id="@+id/allow"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/TextView01"
Android:text="Allow"/>
<Button
Android:id="@+id/deny"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toRightOf="@id/allow"
Android:layout_alignTop="@id/allow"
Android:text="Deny"/>
</RelativeLayout>
Ich habe alle Kombinationen von Attributen im LinearLayout und auf den Button-Elementen ohne Erfolg ausprobiert. Irgendwelche anderen Ideen?
Das ist meine Lösung:
<?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="wrap_content"
Android:layout_centerHorizontal="true">
<TextView
Android:text="@+id/SomeText"
Android:id="@+id/TextView01"
Android:layout_width="wrap_content" Android:layout_height="wrap_content" />
<LinearLayout
Android:orientation="horizontal"
Android:background="@Android:drawable/bottom_bar"
Android:paddingLeft="4.0dip"
Android:paddingTop="5.0dip"
Android:paddingRight="4.0dip"
Android:paddingBottom="1.0dip"
Android:layout_width="fill_parent" Android:layout_height="wrap_content"
Android:layout_below="@+id/TextView01">
<Button
Android:id="@+id/allow"
Android:layout_width="0.0dip" Android:layout_height="fill_parent"
Android:text="Allow"
Android:layout_weight="1.0" />
<Button
Android:id="@+id/deny"
Android:layout_width="0.0dip" Android:layout_height="fill_parent"
Android:text="Deny"
Android:layout_weight="1.0" />
</LinearLayout>
</RelativeLayout>
Ich weiß, dass Sie bereits eine Lösung gefunden haben, aber Sie könnten diese auch nützlich finden. Die leere TextView, die als Mittelpunktsreferenz verwendet wird, kann durch Auffüllen der Dip-Einstellung als Abstand zwischen den Schaltflächen verwendet werden. Es behandelt auch Änderungen der Bildschirmausrichtung gut.
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Button
Android:id="@+id/button1"
Android:text="Left"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_toLeftOf="@+id/centerPoint" />
<TextView
Android:id="@+id/centerPoint"
Android:text=""
Android:layout_width="0dip"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true" />
<Button
Android:id="@+id/button2"
Android:text="Right"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:layout_toRightOf="@+id/centerPoint" />
</RelativeLayout>
Screenshot des Ergebnisses:
Ich weiß nicht, ob Sie tatsächlich eine gute Antwort auf diese Frage gefunden haben, aber ich habe es geschafft, indem Sie eine TableRow erstellen, die Breite auf fill_parent setzen und die Schwerkraft auf die Mitte einstellen und dann die beiden Knöpfe darin platzieren.
<TableRow Android:layout_width="fill_parent"
Android:layout_height="wrap_content" Android:gravity="center">
<Button Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Test" Android:width="100dip"></Button>
<Button Android:layout_width="wrap_content"
Android:text="Test" Android:layout_height="wrap_content"
Android:width="100dip"></Button>
</TableRow>
Wenn Sie nach einer schnellen vollständigen RelativeLayout-Lösung suchen, funktioniert das Folgende gut: _: Das Dummy-Element View ist unsichtbar und wird horizontal zentriert. Beide Tasten sind entweder links oder rechts ausgerichtet.
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res/com.be.Android.stopwatch"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_gravity="center_horizontal">
<View Android:id="@+id/dummy" Android:visibility="visible" Android:layout_height="0dip" Android:layout_width="1dip" Android:background="#FFFFFF" Android:layout_centerHorizontal="true"/>
<ImageButton Android:id="@+id/button1" Android:layout_height="25dip" Android:layout_alignTop="@+id/dummy" Android:layout_toLeftOf="@+id/dummy" Android:layout_width="50dip"/>
<ImageButton Android:id="@+id/button2" Android:layout_height="25dip" Android:layout_alignTop="@+id/dummy" Android:layout_toRightOf="@+id/dummy" Android:layout_width="50dip"/>
</RelativeLayout>
Ich zentriere zwei Knöpfe auf diese Weise:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:orientation="vertical" >
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:text="@string/one" />
</LinearLayout>
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:orientation="vertical" >
<Button
Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:text="@string/two" />
</LinearLayout>
</LinearLayout>
Attribute mit dem Namen Android:layout_foo
sind LayoutParams - Argumente für das übergeordnete Element der Ansicht. Versuchen Sie, Android:gravity="center"
in der LinearLayout
anstelle von Android:layout_gravity
einzustellen. Der eine beeinflusst, wie die LinearLayout
ihre Kinder in sich auslegt, der andere beeinflusst, wie der Elternteil der LinearLayout
es behandeln soll. Du willst den ehemaligen.
Dies scheint eine sehr alte Frage zu sein, aber ich hatte auch das gleiche Problem. Ich musste zwei Knöpfe nebeneinander in der Mitte des Bildschirms (horizontal) platzieren. Am Ende platzierte ich die beiden Knöpfe in einem linearen Layout und platzierte das lineare Layout in einem relativen Layout, wobei die Schwerkraft auf die Mitte eingestellt war.
UPDATE: Ich habe eine noch einfachere Lösung gefunden:
<LinearLayout Android:layout_height="wrap_content" Android:layout_width="wrap_content"
Android:layout_centerHorizontal="true">
<Button Android:text="status" Android:layout_height="wrap_content" Android:layout_width="wrap_content"/>
<Button Android:text="fly" Android:layout_height="wrap_content" Android:layout_width="wrap_content"/>
</LinearLayout>
Das hatte ich vorher:
<RelativeLayout Android:layout_height="wrap_content" Android:layout_width="match_parent"
Android:id="@+id/actionButtons" Android:layout_below="@id/tripInfo" Android:gravity="center">
<LinearLayout Android:layout_height="wrap_content" Android:layout_width="wrap_content">
<Button Android:text="status" Android:layout_height="wrap_content" Android:layout_width="wrap_content" />
<Button Android:text="fly" Android:layout_height="wrap_content" Android:layout_width="wrap_content" />
</LinearLayout>
</RelativeLayout>
Verwenden Sie ein Relatie Layout anstelle von Linear und stellen Sie die Schwerkraft als Android ein: Schwerkraft = "Mitte" .
Relative Layouts bieten eine bessere Leistung und bessere Skalierbarkeit, wenn Sie Ihre Anwendung mit Geräten unterschiedlicher Größe ausführen.
Nachfolgend ein Beispiel für XML und die resultierende Benutzeroberfläche:
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="80dp"
Android:background="@Color/custom1"
Android:gravity="center" >
<TextView
Android:id="@+id/tv1"
Android:layout_width="wrap_content"
Android:layout_height="50dp"
Android:background="@color/Red"
Android:gravity="center"
Android:layout_marginRight="80dp"
Android:text="Text11111" />
<TextView
Android:id="@+id/tv2"
Android:layout_width="wrap_content"
Android:layout_height="50dp"
Android:layout_toRightOf="@id/tv1"
Android:background="@color/Yellow"
Android:gravity="center"
Android:text="Text22222" />
</RelativeLayout>
Ich habe zwei horizontale LinearLayout wie folgt verpackt:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="horizontal"
Android:gravity="center"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
ihre UI-Widgets hier
</LinearLayout> </LinearLayout>
Dies ist, was ich tat, ich habe ein lineares Layout mit einem linearen Layout verpackt, dessen Schwerkraft auf center_horizontal eingestellt ist. Dann stelle ich die Breite des umwickelten linearen Layouts auf die Pixelbreite der kombinierten Schaltflächen ein. In diesem Beispiel sind die Schaltflächen 100px breit, daher habe ich das umwickelte lineare Layout auf 200px gesetzt.
Beispiel XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:gravity="center_horizontal">
<TextView Android:layout_width="fill_parent"
Android:layout_height="200px"
Android:text="This is some text!"
Android:background="#ff333333" />
<LinearLayout Android:layout_height="wrap_content"
Android:id="@+id/linearLayout1"
Android:layout_width="200px">
<Button Android:id="@+id/button1"
Android:layout_height="wrap_content"
Android:text="Button 1"
Android:layout_width="100px">
</Button>
<Button Android:id="@+id/button2"
Android:layout_height="wrap_content"
Android:text="Button 2"
Android:layout_width="100px">
</Button>
</LinearLayout>
</LinearLayout>
Dies ist meine Lösung mit relativeLayout:
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center">
<Button
Android:id="@+id/reject_btn"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/reject"/>
<Button
Android:id="@+id/accept_btn"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/accept"
Android:layout_toRightOf="@id/reject_btn"/>
</RelativeLayout>
Ich fühle deine Schmerzen, ich musste die Dinge ein wenig anpassen und habe diese zur Arbeit gebracht.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<Button
Android:id="@+id/Button01"
Android:layout_alignParentLeft="true"
Android:layout_width="75dp"
Android:layout_height="40dp"
Android:layout_marginTop="15dp"
Android:layout_marginLeft="60dp"
Android:text="No" />
<Button
Android:id="@+id/Button02"
Android:layout_alignParentRight="true"
Android:layout_width="75dp"
Android:layout_height="40dp"
Android:layout_marginTop="15dp"
Android:layout_marginRight="60dp"
Android:text="Yes" />
<TextView
Android:id="@+id/centerPoint"
Android:layout_toRightOf="@id/Button01"
Android:layout_toLeftOf="@id/Button02"
Android:text=""
Android:layout_width="0dip"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
/>
</RelativeLayout>
Verwenden Sie RelativeLayout
anstelle von LinearLayout
und legen Sie Android_layout:gravity="center_horizontal"
fest. Eine sehr unoptimierte Methode besteht darin, den Android_padding
von LinearLayout
so einzustellen, dass Pixelwerte in der Mitte ausgerichtet werden.
Der eleganteste Weg, dies zu erreichen, ohne redundante Komponenten oder Ansichtsgruppen einzuführen, ist die Verwendung von Abständen. Sie können Raumelemente mit layout_weight innerhalb eines linearen Layouts verwenden, um den gewünschten Effekt zu erzielen:
<LinearLayout Android:orientation="horizontal" Android:layout_below="@id/radioGroup"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal|center">
<Space
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_weight="1" />
<Button
Android:id="@+id/allow"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/radioGroup"
Android:drawableLeft="@drawable/accept_btn"
Android:text="Allow"/>
<Button
Android:id="@+id/deny"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toRightOf="@id/allow"
Android:layout_below="@id/radioGroup"
Android:drawableLeft="@drawable/block_btn"
Android:text="Deny"/>
<Space
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_weight="1" />
</LinearLayout>
Wenn Sie den beiden Raumelementen ein gleiches layout_weight geben (es spielt keine Rolle, wie die Gewichtungen sind, sie nehmen sie nur als Verhältnis zwischen den Gesamtwerten aller Gewichtungen), so nehmen die Raumelemente den zusätzlichen Platz ein, der verfügbar ist. Dadurch werden die Schaltflächen in die Mitte gezwungen, denen kein layout_weight zugewiesen ist, sodass sie keinen zusätzlichen Platz beanspruchen, genauso wie sie explizit angegeben werden (die Größe der Bilder).
Das hat für mich ganz gut funktioniert:
<RadioGroup
Android:id="@+id/ratingRadioGroup"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:layout_gravity="center_horizontal">
<RadioButton
Android:id="@+id/likeButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:checked="true"
Android:text="@string/like"
Android:paddingRight="20pt"/>
<RadioButton
Android:id="@+id/dislikeButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/dislike" />
</RadioGroup>
Versuchen Sie, eine Ansicht in der Mitte mit Höhe und Breite von Null zu haben, positionieren Sie sie in der Mitte und positionieren Sie die beiden Knöpfe rechts und links.
Schau mal, das ist Teil einer von mir entwickelten App:
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_centerInParent="true"
Android:id="@+id/view_in_middle">
</View>
<Button
Android:layout_width="120dp"
Android:layout_height="wrap_content"
Android:id="@+id/yes_button"
Android:layout_marginRight="24dp"
Android:layout_toLeftOf="@id/view_in_middle"
Android:text="Yes" />
<Button
Android:layout_width="120dp"
Android:layout_height="wrap_content"
Android:id="@+id/no_button"
Android:text="No"
Android:layout_marginLeft="24dp"
Android:layout_toRightOf="@id/view_in_middle"
/>
</RelativeLayout>
Unter dem Code werden zwei Schaltflächen in der Mitte horizontal ausgerichtet, es wird kein dp angegeben. Das funktioniert also in jeder Orientierung und auf allen Bildschirmen.
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Change password"
Android:id="@+id/change_pwd_button"
Android:layout_gravity="center_horizontal"
Android:background="@Android:color/holo_blue_dark"
Android:textColor="@Android:color/white"
Android:padding="25px"/>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Close"
Android:id="@+id/change_pwd_close_btn"
Android:layout_gravity="center_horizontal"
Android:background="@Android:color/holo_blue_dark"
Android:textColor="@Android:color/white"
Android:layout_marginLeft="20dp"
/>
</LinearLayout>
diese Arbeit für mich. simpel und einfach.
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
>
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<Button
Android:id="@+id/btn_one"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button One"
/>
<Button
Android:id="@+id/btn_two"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button Two"
Android:layout_toRightOf="@id/btn_one"
/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>