Wie kann ich das Widget im horizontalen linearen Layout für Android richtig ausrichten?


204

Dies ist der Code, den ich verwende und der nicht funktioniert:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="horizontal">

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>

Antworten:


417

Versuchen Sie, vor dem Element, das Sie rechts sehen möchten , eine leere Viewhorizontale Innenseite hinzuzufügen LinearLayout, z.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />                

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

11
Das funktioniert! Aber jeder kann erklären warum? Ich konnte es nicht ganz verstehen.
GMsoF

28
In der leeren Ansicht wird versucht, möglichst viel Platz zu beanspruchen, sodass Platz für die Schaltfläche bleibt.
Alcsan

14
Bisher war dies das einzige, was für mich funktioniert, wenn ich versucht habe, ein paar Knöpfe links und einen letzten Knopf rechts zu haben. Aber es fühlt sich für mich wie ein Hack an. Gibt es einen "richtigen" Weg, dies zu tun?
IcedDante

8
Das ist fantastisch! Aber warum funktioniert die Schwerkraft = "richtig" nicht von Anfang an so? Warum braucht es Hilfe aus dieser anderen Sicht? Und wie ist es "richtig", wenn nicht, ohne die zusätzliche Sicht?
Afrika

1
Dies funktioniert nicht in einem gitterartigen Layout - es gibt keinen leeren Raum. Die Lösung von Sherif elKhatib funktioniert.
cdonner

119

Ändern Sie die Schwerkraft des LinearLayout nicht auf "rechts", wenn nicht alles rechts sein soll.

Versuchen:

  1. Ändern Sie die Breite von TextView infill_parent
  2. Ändern Sie die Schwerkraft von TextView inright

Code:

    <TextView 
              android:text="TextView" 
              android:id="@+id/textView1"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"   
              android:gravity="right">
    </TextView>

1
danke dafür - es war die Breite von fill_parent, die mich
abschreckte

2
Ist das lineare Layout überhaupt dafür ausgelegt? Sollte man nicht einfach das relative Layout verwenden, um dies zu erreichen? Ist diese Lösung kein Hack?
user2635088

Dies funktioniert nicht, wenn Sie mehrere TextView-Steuerelemente in einem LinearLayout haben. Siehe Antwort von @alcsan
Felix

Dies sollte die akzeptierte Antwort sein. Bei diesem Ansatz werden keine zusätzlichen Ansichten verwendet, und was noch wichtiger ist, es wird kein layout_weight verwendet, das die Leistung erheblich beeinträchtigt.
Sermilion

android:layout_weight = "1"Seite an Seite mit android:gravity="right", sollte den Trick machen.
Vassilis

63

Als Ergänzung zu alcsan Antwort, können Sie verwenden , Spaceda API 14 (Android 4.0 ICE_CREAM_SANDWICH), Dokument hier .

Space ist eine einfache View-Unterklasse, mit der Lücken zwischen Komponenten in Allzwecklayouts erstellt werden können.

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

    <Space
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="TextView"
        android:gravity="right" />

</LinearLayout>

Für Apps, die API-Levels unter 14 unterstützen, gibt es android.support.v4.widget.Spaceseit Android Support Library r22.1.0.


Wichtig ist, dass Sie layout_weight = "1"
code4j

Funktioniert perfekt! Erhält die Breite jedes Elements.
Phatmann

Das funktioniert. Wow, die Hässlichkeit von Android überrascht mich immer wieder
Chris Neve

31

Mit linearem Layout

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar"
        android:gravity="right" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:src="@drawable/my_booking_icon" />
    </LinearLayout>

Geben Sie hier die Bildbeschreibung ein

mit FrameLayout

<FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:src="@drawable/my_booking_icon" />
    </FrameLayout>

mit RelativeLayout

<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/select_car_book_tabbar">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:src="@drawable/my_booking_icon" />
    </RelativeLayout>

21

Das Einstellen der Ansicht layout_weight="1"würde den Trick tun.!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

<RadioButton
    android:id="@+id/radioButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>


2
Solch eine einfache Lösung +1
Alex

1
Wenn jemand noch sucht, ist dies die richtige Lösung :)
passatgt

Das ist Magie! Wie haben Sie es herausgefunden?
andreikashin

@andreikashin, Betrachten Sie eine Abstimmung, wenn es geholfen hat. Vielen Dank.
Saad Mahmud

13

In android:gravity="right"zu Linearlayout . Vorausgesetzt das TextViewhatlayout_width="wrap_content"


2
Er sagte ausdrücklich, eine einzelne Komponente innerhalb des LinearLayout auszurichten. Nicht das lineare Layout selbst: Das Layout selbst ist auf fill_parent gesetzt.
RichieHH


4

Ich habe es auf einfachste Weise getan:

Nehmen Sie einfach ein RelativeLayout und platzieren Sie die Ansicht Ihres Kindes darin, die Sie auf der rechten Seite platzieren möchten .

    <LinearLayout
        android:id="@+id/llMain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f5f4f4"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingBottom="20dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="20dp">

        <ImageView
            android:id="@+id/ivOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />


        <TextView
            android:id="@+id/txtOne"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="Hiren"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="@android:color/black" />

        <RelativeLayout
            android:id="@+id/rlRight"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right">


            <ImageView
                android:id="@+id/ivRight"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:src="@drawable/ic_launcher" />

        </RelativeLayout>
    </LinearLayout>

Hoffe es wird dir helfen.


3

Du solltest ein RelativeLayout verwenden und sie einfach ziehen, bis es gut aussieht :)

    <ImageView
        android:id="@+id/button_info"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="10dp"
        android:contentDescription="@string/pizza"
        android:src="@drawable/header_info_button" />

</RelativeLayout>

2
"Ziehen Sie sie" nicht empfohlen für Bildschirm mit mehreren Auflösungen
Moses Aprico

3

linear layoutmit layout_width="fill_parent"und auch das Widget mit dem gleichen layout width+ gravity as rightwürde es nach rechts ausrichten.

Ich benutze 2 TextViews im folgenden Beispiel, topicTitlelinks und topicQuestionsrechts.

<?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="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:orientation="horizontal">

    <TextView
        android:id="@+id/topicTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/topicQuestions"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textSize="18sp"
        android:textStyle="bold" />
    </LinearLayout>

</RelativeLayout>

Ausgabe


2

Versuchen Sie, die layout_width in zu ändern, android:layout_width="match_parent"da gravity:"right"der Text innerhalb der layout_width ausgerichtet wird. Wenn Sie Wrap-Inhalt auswählen, muss dieser nicht angezeigt werden. Wenn Sie jedoch "Match Parent" auswählen, kann er nach rechts verschoben werden.


2

Keine zusätzliche Ansicht oder Element erforderlich:

// das ist so einfach und unkompliziert

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
>

// Dies ist die linke Ausrichtung

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="No. of Travellers"
      android:textColor="#000000"
      android:layout_weight="1"
      android:textStyle="bold"
      android:textAlignment="textStart"
      android:gravity="start" />

// das ist die richtige Ausrichtung

<TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Done"
      android:textStyle="bold"
      android:textColor="@color/colorPrimary"
      android:layout_weight="1"
      android:textAlignment="textEnd"
      android:gravity="end" />

</LinearLayout>

0

Im Fall von TextView:

<TextView 
    android:text="TextView" 
    android:id="@+id/textView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"   
    android:gravity="right"
    android:textAlignment="gravity">    
</TextView>

0

Das Hinzufügen einer Ansicht ist etwas schwierig und deckt die gesamte Bildschirmbreite wie folgt ab:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_weight="1" />                

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Versuchen Sie diesen Code:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Create Account"/>

</LinearLayout>

-1

Hier ist ein Beispiel. Der zu arrangierende Schlüssel lautet wie folgt

android:layout_width="0dp"
android:layout_weight="1"

Vollständiger Code

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dp">

    <TextView
        android:id="@+id/categoryName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="abcd" />

    <TextView
        android:id="@+id/spareName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="efgh" />

</LinearLayout>

Geben Sie hier die Bildbeschreibung ein


-1

Verwenden Sie match_parent undvity, um den TextView-Text wie folgt nach rechts zu setzen:

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

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right">
    </TextView>

</LinearLayout>

-2

Versuche dies..

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:gravity="right" >



    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>

</LinearLayout>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.