1

私は2日間、ネストされた線形レイアウト(線形レイアウト内の線形レイアウト)を作成しようとしましたが、ほとんど成功しませんでした。私のマスターレイアウトには、45、45、10の重みが付けられた3つのセクションがあります。これを実行すると、うまく機能しているように見えます。画面に異なる色の長方形が3つ表示されます。

「サブ」線形レイアウトを作成してマスターに追加すると、サブレイアウトが画面を支配します。劣線形レイアウトの重みは35、35、30です。したがって、画面上で上部の長方形が3つの薄い長方形に分割されているのがわかります。代わりに、サブレイアウトに属する3つの長方形を取得します。

何か案は?

public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);

    // Ensure there is a full screen blank window to work with
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                         WindowManager.LayoutParams.FLAG_FULLSCREEN);

      testViewA = new TestView(this);
      testViewB = new TestView(this);
      testViewC = new TestView(this);

      testViewD = new TestView(this);
      testViewE = new TestView(this);
      testViewF = new TestView(this);

      testViewA.color = 0;
      testViewB.color = 1;
      testViewC.color = 2;
      testViewD.color = 3;
      testViewE.color = 4;
      testViewF.color = 5;

    LinearLayout.LayoutParams paramsA = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0, .45f);
    LinearLayout.LayoutParams paramsB = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0, .45f);
    LinearLayout.LayoutParams paramsC = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0, .10f);

    LinearLayout.LayoutParams paramsX = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0, .35f);
    LinearLayout.LayoutParams paramsY = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0, .35f);
    LinearLayout.LayoutParams paramsZ = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0, .30f);

    paramsA.setMargins(10, 10, 10, 10);
    paramsB.setMargins(10, 10, 10, 10);

    testViewA.setLayoutParams(paramsA);
    testViewB.setLayoutParams(paramsB);
    testViewC.setLayoutParams(paramsC);
    testViewD.setLayoutParams(paramsX);
    testViewE.setLayoutParams(paramsY);
    testViewF.setLayoutParams(paramsZ);

    LinearLayout sub1 = new LinearLayout(this);
    sub1.setOrientation(LinearLayout.VERTICAL);
    sub1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    sub1.addView(testViewD);
    sub1.addView(testViewE);
    sub1.addView(testViewF);

    LinearLayout masterL = new LinearLayout(this);
    masterL.setOrientation(LinearLayout.VERTICAL);
    masterL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    masterL.addView(sub1);
    masterL.addView(testViewB);
    masterL.addView(testViewC);

    setContentView(masterL);

}
4

4 に答える 4

1

あなたのレイアウトは問題なく動作しますが、実際に追加するLayoutParams paramsAfor your new sub-layout( ) を追加する代わりに、マスター レイアウト全体を塗りつぶす新しいセット( withおよびset to ?!!?) を設定します。あなたがしなければならないのは、正しいものを次のように設定することだけです:sub1masterL LinearLayoutLayoutParamswidthheightFILL_PARENTsub1LayoutParamssub1

    sub1.setLayoutParams(paramsA);

注: ネストされたウェイトはパフォーマンスにあまり優れていないと他の人が言ったように、他のタイプのレイアウトでレイアウトを改善できるかもしれません。

于 2012-04-14T07:39:10.177 に答える
0

レイアウトの重み属性は、子のレイアウトパラメータがに設定されwrap_contentていて、その中に余分な空白がある場合にのみ役立ちます。

于 2012-04-14T04:30:44.090 に答える
0

まず、これを xml で行うことです。Java で記述した場合、レイアウト コードを読み取る/維持するのは非常に困難です (特に、これが単純な場合)。Java でこのような属性を記述する正当な理由はめったにありません。

第二に、重みを入れ子にしないでください。パフォーマンスに悪いです : http://developer.android.com/resources/articles/layout-tricks-efficiency.htmlネストされたレイアウト。

第 3 に、どうしてもネストされたウェイトを使用する必要がある場合 (これもほぼ確実に使用しません)、sub1 のウェイトを設定する必要があります。重みで 0 ではなく親を埋めるように高さを設定することで、画面いっぱいに表示するように指示しているので、あなたが言っていることを正確に実行することは驚くべきことではありません。

于 2012-04-14T05:40:18.953 に答える
0

必要がある :

1) 体重を設定している子供の身長を 0 に設定します

2) 親レイアウトの setweightSum (子の重みの合計) を設定します。

コードサンプルから作成した例として、このコードを確認してください。

 requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);

          TextView TextViewA = new TextView(this);
          TextView   TextViewB = new TextView(this);
          TextView      TextViewC = new TextView(this);

          TextView      TextViewD = new TextView(this);
          TextView      TextViewE = new TextView(this);
          TextView      TextViewF = new TextView(this);

         TextViewA.setBackgroundColor( Color.RED);
          TextViewB.setBackgroundColor( Color.BLACK);
          TextViewC.setBackgroundColor( Color.BLUE);
          TextViewD.setBackgroundColor( Color.CYAN);
          TextViewE.setBackgroundColor( Color.GRAY);
          TextViewF.setBackgroundColor( Color.GREEN);



       LinearLayout.LayoutParams paramsA = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 0, .45f);
        LinearLayout.LayoutParams paramsB = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT,0, .45f);
        LinearLayout.LayoutParams paramsC = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,0, .10f);

        LinearLayout.LayoutParams paramsX = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, 0,.35f);
        LinearLayout.LayoutParams paramsY = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT,0, .35f);
        LinearLayout.LayoutParams paramsZ = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT,0, .30f);

        paramsA.setMargins(10, 10, 10, 10);
       paramsB.setMargins(10, 10, 10, 10);

      TextViewA.setLayoutParams(paramsA);
        TextViewB.setLayoutParams(paramsB);
        TextViewC.setLayoutParams(paramsC);
        TextViewD.setLayoutParams(paramsX);
        TextViewE.setLayoutParams(paramsY);
        TextViewF.setLayoutParams(paramsZ);

        LinearLayout sub1 = new LinearLayout(this);
        sub1.setOrientation(LinearLayout.VERTICAL);

        sub1.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,0,0.45f));
        sub1.setWeightSum(1f);
        sub1.addView(TextViewD);
        sub1.addView(TextViewE);
        sub1.addView(TextViewF);

        LinearLayout masterL = new LinearLayout(this);
        masterL.setOrientation(LinearLayout.VERTICAL);
        masterL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
       masterL.setWeightSum(1f);
        masterL.addView(sub1);
        masterL.addView(TextViewB);
        masterL.addView(TextViewC);

        setContentView(masterL);
于 2012-04-14T05:40:25.723 に答える