我如何以编程方式修改FrameLayout的layout_weight?

时间:2018-01-19 12:07:50

标签: android android-studio layout android-framelayout

我正在尝试实现一个动态布局,其中有2个片段(1占据屏幕的前80%,另一个占据屏幕的底部20%),我希望能够动态隐藏底部片段并拉伸顶部片段以填充屏幕。

如果有其他方法可以做到这一点我想知道,但是现在我只知道有一种方法可以做到。所以我有2个FrameLayouts,我试图将顶部FrameLayout(main_container)的layout_weight设置为5.

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.jobby.jobbydriver.activity.main"
    android:id="@+id/activity_main"
    android:orientation="vertical"
    android:background="@color/ColorBG"
    android:weightSum="5"
    android:layout_height="match_parent"
    android:layout_width="match_parent" >
    <FrameLayout
        android:id="@+id/main_container"
        android:layout_weight="4"
        android:layout_height="0dp"
        android:layout_width="match_parent" />
    <FrameLayout
        android:id="@+id/second_container"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:layout_width="match_parent" />
</LinearLayout>

我的代码,

FrameLayout frameLayout = findViewById(R.id.main_container);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) frameLayout.getLayoutParams();
params.weight = 5.0f; // "weight" is red, (Cannot resolve symbol 'weight')
frameLayout.setLayoutParams(params);

在底部的第2行,params.weight显示为红色,因此重量不是params的值。这适用于LinearLayout,但不适用于FrameLayout,所以我不确定我做错了什么。

1 个答案:

答案 0 :(得分:0)

当您尝试获取任何视图/视图组布局参数时,它将为其父级的布局参数提供。

考虑到这一点,您将获得LenearLayout.LayoutParams而不是FrameLayout.LayoutParams

所以,试试这个:

    FrameLayout frameLayout = findViewById(R.id.main_container);
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) frameLayout.getLayoutParams();
    params.weight = 5.0f;
    frameLayout.setLayoutParams(params);

NB:您已经设置了权重5.因此,还要考虑更改其他视图权重。