web-dev-qa-db-ja.com

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

上記のレイアウトは水平に分割されたページで、左側にはtextviewのリストがあり、右側にはイメージビューがあります。問題は:textviewコンテンツが長すぎる場合、imageviewはそのコンテンツとオーバーラップしますが、bringtofront()を使用する以外に、テキストビューがイメージビューとオーバーラップする場合、テキストビューの幅を(xmlで)サイズ変更する方法はありますか?

40
user782104

この種のデザインを使用している場合は、線形レイアウトを使用する必要があります。その中のテーブル行を使用して、この種のビューを表示します。

また、ビューが他のビューと重ならないように重みを使用します。このようにしてみてください:

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

それが役に立てば幸い!!

24
Armaan Stranger

最初のアイテムでlayout_toStartOfを使用し、2番目のアイテム+ idを二重引用符で囲みます

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

textviewでこの引数に注意してください

Android:layout_toStartOf="@+id/selectaccount"

XMLは上から下に読み取られます

これがAndroidでのレイアウトのレンダリング方法です

  • Android:layout_toStartOf = "@ id/itemは、itemが定義されていることを意味します上記この行
  • Android:layout_toStartOf = "@ + id/itemは、itemが後でどこかに表示されることを意味しますbelowこの行
89
HimalayanCoder

Lastoneのように、すべてのtextviewsをleftOf imageviewに揃えます:Android:layout_toLeftOf="@id/imageView1"

4
Harish Godara

私は同様の問題を抱えており、ここおよび他の同様のスレッドで提案されたほとんどすべてを試しました。

私のためにそれをしたもう一つのことは、追加することでした:

Android:layout_toStartOf="@+id/youroverlappeditem"

そのため、重複するアイテムは、重複するアイテムまでしか実行されません。

layout_toLeftOf単独では不十分でした

そしてもちろん ellipsize="end"は必要に応じて必要でした。

私のものは、相対レイアウトのrecyclerviewでした。

2
Bud Asterisk
<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

「制約を推測する」をクリックすると、この問題を克服できます。道を示す写真に従ってください:

HowTo AndroidStudio

1
mohamed

制約レイアウト を試してください。レイアウトを簡素化します。

0
Juan Mendez