Android开发:如何代码修改FrameLayout的layout_weight?遇属性报错
解决FrameLayout.LayoutParams无法设置weight的问题
你的问题根源很明确:你错误地将子View的LayoutParams强转为了FrameLayout.LayoutParams,但实际上因为父容器是LinearLayout,子View的LayoutParams类型应该是LinearLayout.LayoutParams——weight是LinearLayout用来分配空间的专属属性,FrameLayout自己的LayoutParams并没有这个字段,所以IDE会提示无法解析符号。
修正后的代码实现
直接把LayoutParams的类型改成LinearLayout.LayoutParams就可以解决这个问题,下面是完整的动态调整布局权重的代码:
// 获取顶部容器 FrameLayout mainContainer = findViewById(R.id.main_container); // 获取底部容器 FrameLayout secondContainer = findViewById(R.id.second_container); // 关键:父容器是LinearLayout,所以用LinearLayout.LayoutParams LinearLayout.LayoutParams mainParams = (LinearLayout.LayoutParams) mainContainer.getLayoutParams(); LinearLayout.LayoutParams secondParams = (LinearLayout.LayoutParams) secondContainer.getLayoutParams(); // 隐藏底部容器,让顶部铺满屏幕 mainParams.weight = 5.0f; secondParams.weight = 0.0f; // 刷新布局 mainContainer.setLayoutParams(mainParams); secondContainer.setLayoutParams(secondParams);
额外说明
如果你需要恢复原来的布局比例(顶部80%,底部20%),只需要把权重改回原来的数值:
mainParams.weight = 4.0f; secondParams.weight = 1.0f;
另外,记得你的根LinearLayout已经设置了weightSum="5",所以权重的总和要和这个值对应,这样布局分配才会符合预期。
内容的提问来源于stack exchange,提问作者user9119021
相关产品推荐
相关产品推荐

