webentwicklung-frage-antwort-db.com.de

Zentrieren Sie zwei Tasten horizontal

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?

46
Yves

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>
94
printminion

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:

screen shot of the result

30
R Hughes

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>
15
ninjasense

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>
6
funcoder

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>
5
cve

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.

4
adamp

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>
3
doles

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>

enter image description here

3
Girish K Gupta

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>
3

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>
2
Charles Eakins

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>
2
nuttynibbles

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>
1
Rmilligan2372

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.

1
Shaireen

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).

1
bakwarte

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>
1
bancer

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>
0
Meraj Hasan

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>
0

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>
0
Jacky Supit