Allineamento delle visualizzazioni di testo sui bordi sinistro e destro nel layout Android


158

Sto iniziando con Android. Ho problemi a far funzionare un layout semplice.

Vorrei usare a LinearLayoutper posizionare due TextViewsin una singola riga. Uno TextViewsul lato sinistro, l'altro sul lato destro (analogo a float: sinistra, float: destra in CSS).

È possibile o devo utilizzare un ViewGroupnesting di layout diverso o ulteriore per realizzarlo?

Ecco cosa ho finora:

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

Risposte:


290

Usare un RelativeLayout con layout_alignParentLefte 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>

Inoltre, dovresti probabilmente usare dip(o dp) anzichésp nel tuo layout . spriflette le impostazioni del testo e la densità dello schermo, quindi di solito sono solo per il dimensionamento degli elementi di testo.


57
Per evitare che i contenuti si sovrappongano, potresti anche voler aggiungere 'android: layout_toLeftOf = "@ + id / mytextview2"' alla prima visualizzazione di testo
Rollin_s

Per le tabelle dinamiche, è possibile eseguire: TableRow.LayoutParams col1Params = new TableRow.LayoutParams (); // Racchiude il contenuto della riga col1Params.height = LayoutParams.WRAP_CONTENT; col1Params.width = LayoutParams.WRAP_CONTENT; // Imposta la gravità per centrare la gravità della colonna col1Params.gravity = Gravity.LEFT;
siddhusingh,

3
Per una migliore compatibilità e supporto per le diverse schermate del dispositivo, utilizzare "android: layout_alignParentEnd =" true "" (quando si utilizza layout_alignParentRight) e "android: layout_alignParentStart =" true "" (quando si utilizza layout_alignParentLeft).
Ivanleoncz,

@Rollin_s, ti amo.
Vegas,

89

È possibile utilizzare la proprietà gravità per "fluttuare" le viste.

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

1
Sfortunatamente sembra che ciò non provochi entrambi gli elementi sulla stessa riga
Webnet il

1
La gravità non influisce solo sull'allineamento del testo?
Joshua Pinter,

3
scusa, funziona. Avevo dimenticato di aggiungere Android: layout_weight = "1". Dopo aver aggiunto che va bene.
Abdullah Umer,

13

Può essere fatto con LinearLayout(meno spese generali e più controllo rispetto all'opzione Layout relativo). Dai alla seconda vista lo spazio rimanente in modo che gravitypossa funzionare. Testato nuovamente su API 16.

Prova

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

Se si desidera limitare le dimensioni della prima vista di testo, procedere come segue:

Regola i pesi come richiesto. Il layout relativo non ti consentirà di impostare una percentuale di peso come questa, solo un dp fisso di una delle viste

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

8

Anche con il consiglio di Rollin's, la risposta di Dave Webb non ha funzionato per me. Il testo a destra TextViewera ancora sovrapposto al testo a sinistraTextView .

Alla fine ho ottenuto il comportamento che volevo con qualcosa del genere:

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

Si noti che mytextview2 è "android:layout_width"impostato come"match_parent" .

Spero che questo aiuti qualcuno!


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


1

Nel caso in cui desideri che gli elementi sinistro e destro avvolgano il contenuto ma abbiano lo spazio intermedio

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

0

Ci sono molti altri modi per ottenere questo risultato, farei qualcosa del genere.

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

0

La risposta di Dave Webb ha funzionato per me. Grazie! Ecco il mio codice, spero che questo aiuti qualcuno!

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

Immagine: immagine


0

inserisci qui la descrizione dell'immagine

Questo codice divide il controllo in due parti uguali.

    <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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.