ルートViewGroup
に 2 つの子があり、そのうちの 1 つだけが常に表示されるレイアウトがあります。他の子の可視性は、View.GONE
適用できない場合に実行時に設定されます。
両方の子が表示されると、高さが に設定されwrap_content
、レイアウトが見栄えがします。match_parent
問題は、表示されているビューを他のビューがなくなったときに拡張したいということです。
これまたは同等のものを達成する方法はありますか?
ルートViewGroup
に 2 つの子があり、そのうちの 1 つだけが常に表示されるレイアウトがあります。他の子の可視性は、View.GONE
適用できない場合に実行時に設定されます。
両方の子が表示されると、高さが に設定されwrap_content
、レイアウトが見栄えがします。match_parent
問題は、表示されているビューを他のビューがなくなったときに拡張したいということです。
これまたは同等のものを達成する方法はありますか?
次のように、任意のビューのレイアウトを変更できます。
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 オブジェクトへの参照を保存できます。
で作業してみました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>