2013-07-31 12 views
30
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:textSize="30sp" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView1" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView2" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/textView4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView3" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/textView5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView4" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/textView6" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView5" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/textView7" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView6" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/textView8" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView7" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/textView9" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView8" 
     android:textSize="20sp" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView9" /> 

    <TextView 
     android:id="@+id/textView10" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="商店圖片:" 
     android:textSize="15sp" 
     android:layout_alignParentTop="true" 
     android:layout_alignLeft="@id/imageView1" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_below="@id/textView10" 
     android:contentDescription="@string/top" /> 
</RelativeLayout> 

Come evitare la sovrapposizione di visualizzazione nel layout relativo in Android?

Simple output: 
textview1  textview9 
textview2  imageview1 
. 
. 
. 
button1 

La disposizione di cui sopra è una pagina che divide horizitonally, per il lato sinistro, v'è un elenco di TextView e pulsante, per il lato destro, c'è una vista immagine. Il problema è: quando il contenuto di textview è troppo lungo, la vista di immagini si sovrapporrà al contenuto di essa, oltre a usare bringtofront(), esiste un modo (in xml) per ridimensionare la larghezza della vista del testo se si sovrappone alla vista dell'immagine?

+1

Perché non provare a mettere 'Android: layout_alignParentTop = "true"' a 'ImageView' e' android: layout_alignLeft = "@ id/textView1" '. Quindi metti 'android: layout_below =" @ id/button1' a 'textView10'. – g00dy

+0

Qual è l'idea generale, hai bisogno di tutti i' TextView's uno sotto l'altro e alla fine un 'Button' (colonna a sinistra) e solo uno 'ImageView' a destra (colonna destra)? – g00dy

risposta

20

Se si utilizza questo tipo di design che si dovrebbe usare layout lineare. e utilizzare le righe tabella in esso per visualizzare questo tipo di vista.

e utilizzare anche il peso in modo che la vista non si sovrapponga ad altre viste. provare in questo modo:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
<TableRow 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:weightSum="10"> 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:textSize="30sp" 
     android:text="test" 
     android:layout_weight="5" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/textView1" 
     android:textSize="20sp" 
     android:text="test" 
     android:layout_weight="5"/> 
</TableRow> 

</LinearLayout> 
</ScrollView> 

Spero che aiuti!

+0

Per quanto ne so, se si utilizza l'attributo layout_weight, una delle dimensioni (layout_height o layout_width) deve essere impostata su 0 dpi. – faizal

+0

Yup..dats giusto, ma qui non abbiamo avuto bisogno di impostare weight.it era solo una proprietà che ho mostrato.Se vogliamo davvero impostare il peso di quello che abbiamo bisogno di impostare 0dp in altezza o in larghezza. –

4

allineare i tutti i textviews a leftOf imageview come lastone: android:layout_toLeftOf="@id/imageView1"

+1

dovrebbe essere lasciato di? – user782104

+1

Ya tutto il testo dovrebbe essere lasciato allineato di imageview in modo che nessuno di questi textview si sovrapporrà all'immagine –

+0

@HarishGodara voleva dire che devi usare' layout_toLeftOf 'piuttosto di 'layout_alignLeft'. Ho aggiornato la risposta al codice corretto –

2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:weightSum="1.0" > 

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight=".5" 
    android:orientation="vertical" > 

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

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Medium Text" 
     /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Medium Text" 
     /> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight=".5" 
    android:orientation="vertical" > 

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

</LinearLayout> 

71

Usa layout_toStartOf nella prima voce con il secondo elemento + id sotto le doppie virgolette

<?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" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/email" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_toStartOf="@+id/selectaccount" 
     android:text="very long text which used to overlap over radio button" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <RadioButton 
     android:id="@+id/selectaccount" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" /> 

</RelativeLayout> 

nota questo argomento TextView

android:layout_toStartOf="@+id/selectaccount" 

Un XML viene letto da cima to bottom

quindi questo è come il layout è reso in Android

  • android: layout_toStartOf = "@ id/pezzo significa che elemento è definito sopra questa linea
  • android: layout_toStartOf =" @ + id/item significa che voce apparirà dopo qualche al di sotto di questa linea
+14

+1 per "@ + id/item indica che l'elemento verrà visualizzato più tardi da qualche parte sotto questa linea. Non ho mai saputo che tu potessi farlo. Ho sempre riordinato le mie viste nell'XML. Grazie! –

+4

Questa dovrebbe essere la risposta accettata. –

0

Ho avuto un problema simile e ho provato praticamente tutto ciò che è stato suggerito qui e in altri thread simili.

L'unica cosa supplementare che ha fatto per me è stato quello di aggiungere:

android:layout_toStartOf="@+id/youroverlappeditem" 

modo da l'articolo sovrapposizione verrà eseguito solo fino alla voce sovrapposta.

layout_toLeftOf non bastasse da sola

e naturalmente ellipsize="end" era necessario a seconda dei casi.

Il mio era per un recyclerview con un layout relativo.

1

si può superare questo problema facendo clic su "dedurre vincoli", seguire il quadro che è indicare la via:

HowTo AndroidStudio