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>
bewussteye
quelle

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>
alcsan
quelle
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>
Sherif elKhatib
quelle
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.

Wochenende
quelle
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>
DeltaCap019
quelle
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"/>

Saad Mahmud
quelle
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"

Ronnie
quelle
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
8

Fügen android:gravity="right"Sie einfach Ihr Liner-Layout hinzu.

Idrees Ashraf
quelle
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.

Hiren Patel
quelle
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>
Detman
quelle
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

betenagupd
quelle
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.

mrvinent
quelle
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>
Kamaljeet Singh
quelle
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>
Роман Елизаров
quelle
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>
Zafar Iqbal
quelle
-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

Rohit Mandiwal
quelle
-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>
Guillermo Gonzalez
quelle
-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>
Shubham
quelle