簡體   English   中英

Android-以編程方式將屏幕划分為布局

[英]Android - Divide the screen into layouts programmatically

我正在嘗試以這種方式通過程序划分屏幕:

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

我有一個主要的LinearLayout,里面有兩個LinearLayouts,一個是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);

謝謝。

您可以通過將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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM