我正在尝试实现一个动态布局,其中有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,所以我不确定我做错了什么。
答案 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.因此,还要考虑更改其他视图权重。