根据现有元素以编程方式设置片段高度

时间:2016-01-18 19:04:14

标签: android android-layout android-fragments

前:

  • 我正在扩展relativelayout类并对下面缩小的xml样本进行充气
  • 我在容器布局“fragment_container”
  • 中以编程方式添加片段

我想要实现的是在布局容器中添加一个片段(在本例中为fragment_container),其高度已由三个textviews统治

<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<TextView
    android:layout_marginTop="10dp"
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Text 1" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView"
    android:text="New Text 2" />

<TextView
    android:layout_marginBottom="10dp"
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView2"
    android:text="New Text 3" />
</RelativeLayout>

要以编程方式设置片段的高度,我这样做:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    if (!hasFocus) return;

    ViewGroup.LayoutParams params = fragment.getView().getLayoutParams();
    params.height = getMeasuredHeight();
    params.width = getMeasuredWidth();
    fragment.getView().setLayoutParams(params);
}

此解决方案有时有效(有时getMeasuredHeight返回0&amp;&amp; getMeasuredWidth返回0),因此它不是正确的解决方案。

这是一个只能通过使用xml来解决的问题吗?

1 个答案:

答案 0 :(得分:0)

当我看到你正在垂直堆叠视图时,最好不要使用垂直方向的LinearLayout,并给每个视图一个合适的重量(0表示高度,适当的重量值)?