以编程方式设置权重(百分比)

13
我有两个按钮,我想动态地给它们赋予权重。它们最初的权重均为0.5(当然会加到LinearLayout的权重1),但如果是首选项,则我想将它们的权重分别更改为0.7和0.3。我可以在XML中设置权重,但我似乎找不到如何在程序中更改它们的方法。
LinearLayout.LayoutParams PO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .60f);
LinearLayout.LayoutParams MO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .20f);

请在https://dev59.com/P2445IYBdhLWcg3w6eRo上检查我的答案。 - Andres Felipe
3个回答

9

请查看LayoutParams,它有一个可以设置权重的字段。


4
嘿,我最终得到了以下代码:LinearLayout.LayoutParams PO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .60f); LinearLayout.LayoutParams MO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .20f); - ecirish
2
@ecirish,我将您的解决方案添加到问题的末尾,以便更好地展示。 - Marek Sebera

3
如果具有宽度、高度和重量的构造函数无法使用,请尝试使用具有宽度和高度的构造函数。然后手动设置重量。
如果您想让宽度根据重量设置,请在构造函数中将宽度设置为0。对于高度也是同样的道理。 以下代码对我很有效。
LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.3f;
child1.setLayoutParams(childParam1);

LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.7f;
child2.setLayoutParams(childParam2);

parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);

3

使用此方法来回收 LayoutParam 对象:

((LinearLayout.LayoutParams) view.getLayoutParams()).weight = 0.2f;
view.refreshDrawableState(); // This is to explicit force the refresh.

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