Android - 以编程方式将屏幕划分为布局

时间:2015-12-10 12:59:31

标签: android android-layout android-linearlayout

我试图通过这种方式以编程方式划分屏幕:

|-------------|
|             |
|             |
|             |
|--|----------|
|  |          |
|--|----------|

我所拥有的是一个主要的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);

感谢。

1 个答案:

答案 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);