wake-up-neo.com

Wie vermeide ich die Überlappungsansicht im relativen Layout in Android

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

Simple output:
textview1     textview9
textview2     imageview1
.
.
.
button1

Das obige Layout ist eine Seite, die horizontal unterteilt ist. Für die linke Seite gibt es eine Liste mit Textansicht und Schaltflächen. Für die rechte Seite gibt es eine Bildansicht. Das Problem ist: Wenn der Inhalt der Textansicht zu lang ist, überlappt die Bildansicht deren Inhalt. Abgesehen von der Verwendung von bringenofront () gibt es eine Möglichkeit (in xml), die Breite der Textansicht zu ändern, wenn sie sich mit der Bildansicht überlappt?

37
user782104

Wenn Sie diese Art von Design verwenden, sollten Sie lineares Layout verwenden und Tabellenzeilen verwenden, um diese Art von Ansicht anzuzeigen.

und verwenden Sie auch Gewicht, damit sich Ihre Ansicht nicht mit anderen Ansichten überschneidet. versuchen Sie es so:

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

Ich hoffe es hilft!!

24
Armaan Stranger

Verwenden Sie layout_toStartOf im ersten Element mit dem zweiten Element + ID unter doppelten Anführungszeichen

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

beachten Sie dieses Argument in der Textansicht

Android:layout_toStartOf="@+id/selectaccount"

Ein XML wird von oben nach unten gelesen

so wird also das Layout in Android gerendert

  • Android: layout_toStartOf = "@ id/item bedeutet, dass item definiert ist oben diese Zeile
  • Android: layout_toStartOf = "@ + id/item bedeutet, dass item später irgendwo unten dieser Zeile angezeigt wird
87
HimalayanCoder

Richten Sie alle Textansichten wie lastone an leftOf imageview aus: Android:layout_toLeftOf="@id/imageView1"

4
Harish Godara
<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>

2
Addicted Manish

Ich hatte ein ähnliches Problem und versuchte so ziemlich alles, was hier und in anderen ähnlichen Threads vorgeschlagen wurde.

Das einzige, was es für mich getan hat, war folgendes hinzuzufügen:

Android:layout_toStartOf="@+id/youroverlappeditem"

das überlappende Element wird also nur bis zum überlappenden Element ausgeführt.

layout_toLeftOf war alleine nicht genug

und natürlich war ellipsize="end" erforderlich.

Meins war für eine recyclerview mit einem relativen Layout.

1
Bud Asterisk

Sie können dieses Problem überwinden, indem Sie auf "Constraints ableiten" klicken. Folge dem Bild, das den Weg zeigt:

 HowTo AndroidStudio

1
mohamed

Testen Sie das Constraint-Layout . Es vereinfacht Ihr Layout.

0
Juan Mendez