2011-07-05 14 views
9

In questo momento ho due visuali di testo una allineata a sinistra del relativo layout e una allineata a destra. Il testo a sinistra è molto più lungo di quello a destra. In alcune occasioni, il testo a sinistra è di due righe. Quando ciò accade, questo testo si sovrappone al testo allineato a destra.Come evitare che le viste si sovrappongano nel relativo layout?

Esiste comunque la prevenzione? O c'è un modo per dire se il testo a sinistra è di due righe, metti il ​​testo a destra sulla seconda riga?

Ho problemi con il nome e il tempo qui:

<RelativeLayout android:layout_width="wrap_content" android:id="@+id/relativeLayout" android:layout_height="wrap_content"> 

    <TextView android:text="TextView" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10sp" android:textStyle="bold" android:textSize="16sp"></TextView> 
    <TextView android:layout_width="wrap_content" android:id="@+id/address" android:text="address" android:layout_height="wrap_content" android:layout_below="@+id/name" android:layout_alignLeft="@+id/name" android:layout_marginLeft="30sp"></TextView> 
    <TextView android:layout_width="wrap_content" android:layout_toRightOf="@+id/address" android:text="" android:layout_height="wrap_content" android:layout_alignTop="@+id/address" android:layout_alignBottom="@+id/address" android:id="@+id/crossStreet"></TextView> 
    <TextView android:layout_width="wrap_content" android:id="@+id/time" android:text="Time" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="10sp"></TextView> 

</RelativeLayout> 

risposta

16

Potrebbe contenere invece quei due TextViews all'interno di una LinearLayout orizzontale (che di per sé sarebbero ancora un bambino della vostra RelativeLayout). Quindi, assegnare gli attributi di peso appropriati a ciascuna delle due TextViews all'interno di LinearLayout.

+0

impressionante. ha funzionato. Ho anche fatto allineare il tempo a destra del layout lineare, per riferimento futuro. – mergesort

+0

Dovrei giocare con i pesi? Ho .35 e .65 per farlo funzionare, ma .4 e .6 ha dato risultati divertenti – mergesort

0

Si prega di controllare sotto il codice più utile per voi.

<?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="wrap_content" 
    android:orientation="horizontal"> 
    <LinearLayout android:layout_width="fill_parent" 
     android:weightSum="1.0" android:id="@+id/relativeLayout" 
     android:layout_height="wrap_content"> 
     <TextView android:text="TextView1 hhhhh hhhhhhhh hhhhhhhh hhhhhhh hhhhhh" 
      android:id="@+id/name" android:layout_weight="0.5" 
      android:layout_width="0dip" android:layout_height="wrap_content" 
      android:layout_marginLeft="10sp" android:textStyle="bold" 
      android:textSize="16sp"></TextView> 
     <TextView android:layout_width="0dip" android:layout_weight="0.5" 
      android:id="@+id/time" android:text="Textview4" 
      android:layout_height="wrap_content" android:layout_alignParentRight="true" 
      android:layout_marginRight="10sp"></TextView> 
    </LinearLayout> 
</LinearLayout> 
19

Per ottenere lo stesso risultato utilizzando RelativeLayout utilizzare android:layout_toLeftOf="@+id/right_text". Posizionerà il lato destro di questa vista a sinistra dell'ID della vista di ancoraggio specificato.

Si prega di seguire questo esempio:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="@dimen/margin_material_small" 
    android:paddingRight="@dimen/margin_material_small"> 
    <TextView 
     android:id="@+id/long_text" 
     style="@style/Base.TextAppearance.AppCompat.Title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/right_text" 
     android:singleLine="true" 
     tools:text="Some text field that will definitely overlap with another one" /> 
    <TextView 
     android:id="@+id/right_text" 
     style="@style/Base.TextAppearance.AppCompat.Display1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:singleLine="true" 
     tools:text="10.34" /> 
    <TextView 
     android:id="@+id/subtext" 
     style="@style/Base.TextAppearance.AppCompat.Medium" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/long_text" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@+id/right_text" 
     android:singleLine="true" 
     tools:text="Some other text slightly smaller"/> 
</RelativeLayout> 


Risultato della disposizione di cui sopra:

Result of attached example

+7

Questa dovrebbe essere la risposta accettata –

+1

Questo è certamente preferibile alla risposta attualmente accettata. Non è necessario nidificare un altro contenitore (layout lineare) all'interno di un layout relativo. Vuoi ridurre il più possibile i contenitori di nidificazione. – PentaPenguin

0
<RelativeLayout 
     android:id="@+id/relativeParent" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/titleLeft" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_toLeftOf="@+id/imageRight" 
      android:layout_alignParentStart="true" /> 

     <ImageView 
      android:id="@+id/imageRight" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:src="@drawable/image" /> 
</RelativeLayout> 



android:layout_toLeftOf="@+id/imageRight" 
android:layout_alignParentStart="true" 

ha fatto il trucco senza aggiungere ulteriore LinearLayout

0

Miglior Fix:

android:layout_toStartOf="@id/item_on_the_right" 
Problemi correlati