通过编程设置FrameLayout的layout_weight属性

6
我正在尝试以编程方式创建一个FrameLayout,如下所示(此视图将浮动在LinearLayout的底部中心):
    FrameLayout bottomFrameLayout = new FrameLayout(context);
    bottomFrameLayout.setLayoutParams(new FrameLayout.LayoutParams(0,LayoutParams.FILL_PARENT,Gravity.CENTER | Gravity.BOTTOM));

自从我设置了 layout_width=0dp,我想通过设置 layout_weight 来控制宽度。我该怎么做?
1个回答

18

由于FrameLayoutLinearLayout的子项,因此您需要使用LinearLayout.LayoutParams (int width, int height, float weight)构造函数来设置LinearLayout中子项的参数。

编辑:

 FrameLayout bottomFrameLayout = new FrameLayout(context);
 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0,LayoutParams.FILL_PARENT,mWeight);
 lp.gravity = Gravity.CENTER | Gravity.BOTTOM;
 bottomFrameLayout.setLayoutParams(lp);

1
如果我使用LinearLayout.LayoutParams来设置权重,那么如何设置重力? - prostock
4
根据参考文献,FrameLayout不是LinearLayout的子类,且FrameLayout.LayoutParams也不是LinearLayout.LayoutParams的子类。你的答案过时了吗? - soriak
2
@soriak 我认为在这种情况下,child并不是指“继承自类”,而是指“是问题中提到的具体LinearLayout对象的子级”。 - Petr
但它不能工作。我得到一个异常:..LinearLayout.LayoutParams 无法转换为 FrameLayout.LayoutParams..。答案已过时。 - nick
@NikolaDespotoski,我的导入和其他方面都很好。我已经在另一个stackoverflow上解决了这个问题。感谢您的回答。 - nick
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接