2

私はRelativeLayoutにTextView(width:fill_parent)があり、動的な幅と高さで、その上の2つのビューの下に並んでいることを確認したいと思います。つまり、左側のビューの方が高い場合と、右側のビューの方が高い場合があります。

2つの「下」パラメータを設定しようとしましたが、もちろんそれは許可されていません。私はコードを介してそれを変更しようとしました(XMLはtxt TextViewの下に設定され、imgはその横にあるImageViewです):

if (txt.getHeight() + txt.getTop() < img.getHeight() + img.getTop()) {
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
                    params.addRule(RelativeLayout.BELOW, R.id.image);
                    txtDetails.setLayoutParams(params);
                }

(txtDetailsは、両方のビューの下に必要なものです)。

それが機能しなかった場合(何も変更されなかった場合)、両方のビューを格納し、機能したRelativeLayoutの下の独自のRelativeLayoutにtxtDetailsを配置しました。ただし、RLは、新しいRLを作成しなくても、この状況に対処できるはずだと思います。出来ますか?または、このビューを配置するための最良の方法は何ですか?

ありがとう

4

2 に答える 2

2

テーブルレイアウトを使用してみませんか?それは2行であなたが望むことを正確に行います。

最初に2つの変数ビューを1つの行に追加し、その後、テキストビューを含む別の行を追加します。

このような:

<TableLayout
    android:id="@+id/center"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
    <TableRow >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="150sp"
        android:layout_height="wrap_content"
        android:text="@string/lorem_short" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="150sp"
        android:layout_height="wrap_content"
        android:layout_marginRight="15dp"
        android:text="@string/lorem_long" />
    </TableRow>
    <TableRow>
    <TextView
        android:id="@+id/textView3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5sp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    </TableRow>
</TableLayout>
于 2012-04-09T10:56:53.670 に答える
1

コードで考えられる問題:
ビューでgetHeight()を呼び出していますが、レイアウトパスがまだ実行されていない場合は0が返される可能性があります。次のように、コード全体をGlobalLayoutListenerに配置する必要があります。

getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
   @Override
   public void onGlobalLayout() {
       // your code here...
       txt.requestLayout(); // Add this to ensure your changes are applied.
   }
}

PS。txt.getBottom()代わりに電話することができますtxt.getHeight() + txt.getTop()

于 2012-04-09T10:27:42.050 に答える