Ausrichten von Textansichten am linken und rechten Rand im Android-Layout

158

Ich fange mit Android an. Ich habe Probleme, ein einfaches Layout in Gang zu bringen.

Ich möchte mit a LinearLayoutzwei TextViewsin einer Reihe positionieren . Eine TextViewauf der linken Seite, die andere auf der rechten Seite (analog zu float: left, float: right in CSS).

Ist das möglich oder muss ich eine andere ViewGroupoder weitere Layout-Verschachtelung verwenden, um dies zu erreichen?

Folgendes habe ich bisher:

<?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:padding="10sp">
<TextView android:id="@+id/mytextview1" android:layout_height="wrap_content" android:text="somestringontheleftSomestring" android:layout_width="wrap_content"/>
<TextView android:id="@+id/mytextview2" android:layout_height="wrap_content" android:ellipsize="end"
    android:text="somestringontheright" android:layout_width="wrap_content"/>
</LinearLayout>
Richard
quelle

Antworten:

290

Verwenden Sie ein RelativeLayoutmit layout_alignParentLeftund layout_alignParentRight:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:padding="10dp">

    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true" 
        android:id="@+id/mytextview1"/>

    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:id="@+id/mytextview2"/>

</RelativeLayout>

Außerdem sollten Sie wahrscheinlich dip(oder dp) eher als spin Ihrem Layout verwenden . spspiegeln die Texteinstellungen sowie die Bildschirmdichte wider, sodass sie normalerweise nur zur Größenänderung von Textelementen dienen.

Dave Webb
quelle
57
Um zu verhindern, dass sich der Inhalt überschneidet, möchten Sie möglicherweise auch 'android: layout_toLeftOf = "@ + id / mytextview2"' zur ersten Textansicht hinzufügen
Rollin_s
Für dynamische Tabellen haben Sie folgende Möglichkeiten: TableRow.LayoutParams col1Params = new TableRow.LayoutParams (); // Den Inhalt der Zeile zusammenfassen col1Params.height = LayoutParams.WRAP_CONTENT; col1Params.width = LayoutParams.WRAP_CONTENT; // Setze die Schwerkraft so, dass die Schwerkraft der Spalte zentriert wird col1Params.gravity = Gravity.LEFT;
Siddhusingh
3
Verwenden Sie für eine bessere Kompatibilität und Unterstützung für verschiedene Gerätebildschirme "android: layout_alignParentEnd =" true "" (bei Verwendung von layout_alignParentRight) und "android: layout_alignParentStart =" true "" (bei Verwendung von layout_alignParentLeft).
ivanleoncz
@ Rollin_s, ich liebe dich.
Vegas
89

Sie können die Schwerkraft-Eigenschaft verwenden, um Ansichten zu "schweben".

<?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">

    <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_vertical|center_horizontal"
            android:orientation="horizontal">

        <TextView  
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:gravity="left"
            android:layout_weight="1"
            android:text="Left Aligned"
            />

        <TextView  
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:gravity="right"
            android:layout_weight="1"
            android:text="Right Aligned"
            />
    </LinearLayout>

</LinearLayout>
JeremyFromEarth
quelle
1
Leider scheint dies nicht dazu zu führen, dass sich beide Elemente in derselben Zeile befinden
Webnet
1
Beeinflusst die Schwerkraft nicht nur die "Textausrichtung"?
Joshua Pinter
3
Entschuldigung, es funktioniert. Ich hatte vergessen, Android hinzuzufügen: layout_weight = "1". Nach dem Hinzufügen ist es in Ordnung.
Abdullah Umer
13

Dies ist möglich LinearLayout(weniger Aufwand und mehr Kontrolle als die Option Relatives Layout). Geben Sie der zweiten Ansicht den verbleibenden Platz, damit gravitysie funktionieren kann. Zurück zu API 16 getestet.

Beweis

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Aligned left" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="end"
        android:text="Aligned right" />
</LinearLayout> 

Wenn Sie die Größe der ersten Textansicht begrenzen möchten, gehen Sie folgendermaßen vor:

Passen Sie die Gewichte nach Bedarf an. Im relativen Layout können Sie kein solches prozentuales Gewicht festlegen, sondern nur einen festen dp für eine der Ansichten

Beweis 2

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

    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="Aligned left but too long and would squash the other view" />

    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:gravity="end"
        android:text="Aligned right" />
</LinearLayout>
Carson Holzheimer
quelle
8

Selbst mit Rollins Tipp hat Dave Webbs Antwort bei mir nicht funktioniert. Der Text rechts TextViewüberlappte immer noch den Text linksTextView .

Ich bekam schließlich das Verhalten, das ich mit so etwas wollte:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout01" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:padding="10dp">

<TextView 
    android:id="@+id/mytextview1"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" />

<TextView 
    android:id="@+id/mytextview2"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@id/mytextview1"
    android:gravity="right"/>

</RelativeLayout>

Beachten Sie, dass mytextview2 "android:layout_width"als festgelegt wurde "match_parent".

Hoffe das hilft jemandem!

Kürbiskuchen65
quelle
4

<TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Hello world" />

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

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Gud bye" />

Taj Mb
quelle
1

Falls Sie möchten, dass das linke und das rechte Element den Inhalt umbrechen, aber den mittleren Raum haben

<LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    <Space
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
</LinearLayout>
funct7
quelle
0

Es gibt viele andere Möglichkeiten, dies zu erreichen. Ich würde so etwas tun.

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

    <TextView
        android:id="@+id/textRight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginTop="30dp"
        android:text="YOUR TEXT ON THE RIGHT"
        android:textSize="16sp"
        android:textStyle="italic" />


    <TextView
        android:id="@+id/textLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="30dp"
        android:text="YOUR TEXT ON THE LEFT"
        android:textSize="16sp" />
</RelativeLayout>
NelsonRoberts
quelle
0

Dave Webbs Antwort hat bei mir funktioniert. Vielen Dank! Hier mein Code, hoffe das hilft jemandem!

<RelativeLayout
    android:background="#FFFFFF"
    android:layout_width="match_parent"
    android:minHeight="30dp"
    android:layout_height="wrap_content">
    <TextView
        android:height="25dp"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dp"
        android:text="ABA Type"
        android:padding="3dip"
        android:layout_gravity="center_vertical"
        android:gravity="left|center_vertical"
        android:layout_height="match_parent" />
    <TextView
        android:background="@color/blue"
        android:minWidth="30px"
        android:minHeight="30px"
        android:layout_column="1"
        android:id="@+id/txtABAType"
        android:singleLine="false"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="20dp"
        android:layout_width="wrap_content" />
</RelativeLayout>

Bild: Bild

GinCanhViet
quelle
0

Geben Sie hier die Bildbeschreibung ein

Dieser Code teilt die Kontrolle in zwei gleiche Seiten.

    <LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/linearLayout">
    <TextView
        android:text = "Left Side"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight = "1"
        android:id = "@+id/txtLeft"/>

    <TextView android:text = "Right Side"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight = "1"
        android:id = "@+id/txtRight"/>
    </LinearLayout>
Sagte Muhammad Idrees
quelle