1

ルートViewGroupに 2 つの子があり、そのうちの 1 つだけが常に表示されるレイアウトがあります。他の子の可視性は、View.GONE適用できない場合に実行時に設定されます。

両方の子が表示されると、高さが に設定されwrap_content、レイアウトが見栄えがします。match_parent問題は、表示されているビューを他のビューがなくなったときに拡張したいということです。

これまたは同等のものを達成する方法はありますか?

4

2 に答える 2

1

次のように、任意のビューのレイアウトを変更できます。

view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

コンストラクターは、次のように幅と高さを取りますnew LayoutParams(int width, int height)
また、ViewGroup のタイプごとに LayoutParams クラスがあります。特定の ViewGroup を参照するものを必ずインポートしてください。したがって、ViewGroup が LinearLayout の場合、次を使用します。

import android.widget.LinearLayout.LayoutParams;

私はこの戦略を理解することに失敗しました

どこで問題が発生したかはわかりませんが、このアプローチにはいくつかの追加行が必要なだけです。

// When you want to show both views
view1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
view2.setVisibility(View.VISIBLE);
...

// When you want to hide the second view
view1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
view2.setVisibility(View.GONE);

ビューを複数回非表示/表示する場合は、新しいオブジェクトを繰り返し作成するのではなく、各 LayoutParams オブジェクトへの参照を保存できます。

于 2012-09-25T18:31:26.080 に答える
0

で作業してみましたandroid:layout_weightか?

この小さな例をまとめました。以下に、表示されている両方のビュー (左) と、view2 の可視性を設定した状態GONE(右) を示す図を追加しました。ご覧のとおり、view1 は使用可能なすべてのスペースを使い果たします。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <View
        android:id="@+id/view1"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#ff0000" />

    <View
        android:id="@+id/view2"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#0000ff" />

</LinearLayout>

例

于 2012-09-26T09:40:37.197 に答える