我试图通过这种方式以编程方式划分屏幕:
|-------------|
| |
| |
| |
|--|----------|
| | |
|--|----------|
我所拥有的是一个主要的LinearLayout,里面有两个LinearLayout,一个是topLL,权重是1,一个是bottomLL,权重是5。
在bottomLL内部还有两个LinearLayouts,在bottomLeftLL上,权重为5,一个bottomRightLL,权重为50。
实际结果实际上几乎是正确的,就是这样:
|-------------|
| |
| |
| |
|------|------|
| | |
|------|------|
顶部和底部被正确划分,但是bottomLeft和bottomRight获得底部的相同部分,而不是我提到的重量。
知道为什么吗?编辑:这是相关的代码:
main = new LinearLayout(....);
LinearLayout.LayoutParams mainLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
main.setLayoutParams(mainLayoutParams);
main.setOrientation(LinearLayout.VERTICAL);
main.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
main.setVerticalGravity(Gravity.CENTER_VERTICAL);
LinearLayout mainTop = new LinearLayout(....);
LinearLayout.LayoutParams mainTopLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mainTopLayoutParams.weight = 1;
mainTop.setLayoutParams(mainTopLayoutParams);
mainTop.setOrientation(LinearLayout.VERTICAL);
mainTop.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
mainTop.setVerticalGravity(Gravity.CENTER_VERTICAL);
LinearLayout mainBottom = new LinearLayout(...);
LinearLayout.LayoutParams mainBottomLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mainBottomLayoutParams.weight = 5;
mainBottom.setLayoutParams(mainBottomLayoutParams);
//mainBottom.setWeightSum(55); - it was suggested but didn't work
mainBottom.setOrientation(LinearLayout.HORIZONTAL);
mainBottom.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
mainBottom.setVerticalGravity(Gravity.CENTER_VERTICAL);
LinearLayout mainBottomLeft = new LinearLayout(...);
LinearLayout.LayoutParams mainBottomLeftLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mainBottomLeftLayoutParams.weight = 50;
mainBottomLeft.setLayoutParams(mainBottomLeftLayoutParams);
mainBottomLeft.setOrientation(LinearLayout.HORIZONTAL);
mainBottomLeft.setHorizontalGravity(Gravity.END);
mainBottomLeft.setVerticalGravity(Gravity.CENTER_VERTICAL);
LinearLayout mainBottomRight = new LinearLayout(...);
LinearLayout.LayoutParams mainBottomRightLayoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mainBottomRightLayoutParams.weight = 5;
mainBottomRight.setLayoutParams(mainBottomLeftLayoutParams);
mainBottomRight.setOrientation(LinearLayout.HORIZONTAL);
mainBottomRight.setHorizontalGravity(Gravity.START);
mainBottomRight.setVerticalGravity(Gravity.CENTER_VERTICAL);
感谢。
答案 0 :(得分:0)
您可以通过将LayoutParams应用于这些视图,以编程方式传递每个左下和右下部分的“权重”。
假设您已经引用了这两个底部部分:
LinearLayout llBottomLeft = (LinearLayout) findViewById(....;
LinearLayout llBottomRight = ....;
LinearLayout.LayoutParams llParam1 = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, 5.0f);
LinearLayout.LayoutParams llParam2 = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, 50.0f);
llBottomLeft.setLayoutParams(llParam1);
llBottomRight.setLayoutParams(llParam2);
请记住也将“weightSum”参数放到他们的共同父级,值为“55”:
llBottomContainer.setWeightSum(55.0f);