つまり、RelativeLayout
の子に常にそのRelativeLayout
他の子が同じであるかどうかに関係なくRelativeLayout
振る舞う?要するに、それだけです。詳細は以下。
私が達成しようとしているのは、少なくとも3つのビューを持つListView
行です。これらのビューの1つは、リストエントリの右側にあるストライプのようなものです(以下の赤いビュー)。私が抱えている問題は、左側にTextView
があり、テキストの量に応じて、ストライプがレイアウト全体を埋めることができないことです。これは以下の画像で非常に明確に説明されています。
ListView
アイテムのレイアウト:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<View
Android:id="@+id/bottom_line"
Android:layout_width="match_parent"
Android:layout_height="5dp"
Android:layout_alignParentBottom="true"
Android:background="#fc0" />
<!-- Why match_parent does not work in view below? -->
<View
Android:id="@+id/stripe"
Android:layout_width="80dp"
Android:layout_height="wrap_content"
Android:minHeight="50dp"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_alignParentBottom="true"
Android:background="#f00" />
<TextView
Android:id="@+id/text"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_toLeftOf="@id/stripe"
Android:text="This is a very long line, meant to completely break the match_parent property of the box at right"
style="?android:textAppearanceLarge"/>
</RelativeLayout>
結果:
match_parent
に設定しても違いはありません。それを行いました。質問を繰り返します。赤いストライプが常に親を垂直方向に塗りつぶしたいのです。ストライプがルートの上部に揃っていないことがわかります。
注:上記の例は、私が考えることができる最も単純な自己完結型の例です。これは、静的なListActivity
配列によって匿名のArrayAdapter
が入力されたString
です。 onCreate
の関連コードは最大8行なので、心配する必要はありません。それは本当にレイアウトです。その上、ネストされたLinearLayout
sを使ってこれをすでに機能させていますが、可能であれば、レイアウト構造の深さを少し減らしようとしています。 LinearLayout
は正常に機能します。
同じ要件があり、私の解決策は、赤いストライプの上部を親の上部に揃え、ストライプの下部を左側のテキストビューの下部に揃えることでした。この場合の高さは関係ありません。 wrap_content
またはmatch_parent
。
メインのRelativeLayout
をLinearLayout
の中に置くだけで、子ビューの高さの計算が正しくなります。私は同じ問題を抱えており、それは私のために働いた。
これを試して:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<View
Android:id="@+id/stripe"
Android:layout_width="80dp"
Android:layout_height="match_parent"
Android:layout_alignBottom="@id/text"
Android:layout_alignParentRight="true"
Android:layout_alignTop="@id/text"
Android:background="#f00"
Android:minHeight="50dp"/>
<TextView
Android:id="@+id/text"
style="?android:textAppearanceLarge"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_toLeftOf="@id/stripe"
Android:text="This is a very long line, meant to completely break the match_parent property of the box at right"/>
<View
Android:id="@+id/bottom_line"
Android:layout_width="match_parent"
Android:layout_height="5dp"
Android:layout_below="@id/text"
Android:background="#fc0"/>
</RelativeLayout>
赤いビューの上部と下部の整列は、textviewと同じになりました。
リストアイテムホルダーにリスナーを追加して、ホルダーが高さを変更するたびに、その高さを子に設定します。 i1
はトップ、i3
はボトム用です。
parent.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
child.setTop(i1);
child.setBottom(i3);
}
});
これは厄介な問題であり、RelativeLayoutをLinearLayout内に配置する必要があります
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:minHeight="40dp"
>
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<RelativeLayout
Android:id="@+id/deleteItem"
Android:layout_width="60dp"
Android:layout_height="match_parent"
Android:layout_alignParentRight="true"
Android:clickable="true"
Android:background="@color/background_grey"
>
<TextView
style="@style/SmallButtonFont"
Android:layout_marginRight="12dp"
Android:layout_centerInParent="true"
Android:text="CLEAR"
Android:textColor="@color/globalRedLight" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>