0

メインの LinearLayout 内に複数の線形レイアウトを作成しようとしています。しかし、マージンに問題があります。ここに私のコードと出力があります: -

public class CustomActivity extends Activity {

private LinearLayout mainLayout; 
Float value;
int dpi;
private String[] data = new String[] {"Hello World", "Hello World", "Hello World", "Hello World", ""};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_custom);
    mainLayout = (LinearLayout)findViewById(R.id.mainLayout);
    mainLayout.setOrientation(LinearLayout.VERTICAL);
    value = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
    dpi = Math.round(value);
    addLayouts();
}

private void addLayouts() {
    int marginBottom = 0;
    int count = 0;
    for (int i = 0; i < data.length; i++) {
        OutLinedLL linearLayout = new OutLinedLL(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dpi*22,dpi*35);
        if(i==0)
        {   
            linearLayout.setBackgroundColor(Color.RED);
            params.setMargins(dpi*7, dpi, dpi*4, marginBottom);
            linearLayout.setLayoutParams(params);
            mainLayout.addView(linearLayout);
        }
        else 
        {
            count += dpi*2;
            Log.e("Count", count+"");
            marginBottom -= (dpi*28)+count;
            Log.e("Margin Bottom", marginBottom+"");
            linearLayout.setBackgroundColor(Color.GREEN);
            params.setMargins(dpi*7, dpi, dpi*4, marginBottom);
            linearLayout.setLayoutParams(params);
            mainLayout.addView(linearLayout);
        }
        marginBottom = 0;
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_custom, menu);
    return true;
}

}

スタックトレース: -

09-29 11:49:23.844: E/Count(16149): 40
09-29 11:49:23.844: E/Margin Bottom(16149): -600
09-29 11:49:23.852: E/Count(16149): 80
09-29 11:49:23.852: E/Margin Bottom(16149): -640
09-29 11:49:23.852: E/Count(16149): 120
09-29 11:49:23.852: E/Margin Bottom(16149): -680
09-29 11:49:23.852: E/Count(16149): 160
09-29 11:49:23.852: E/Margin Bottom(16149): -720

出力:-ここに画像の説明を入力

ご覧のとおり、マージンの下部はすべてのレイアウトで同じではありません。なぜそれが起こっているのかわかりません。私は現在カスタムビューを学ぼうとしているので、助けていただければ幸いです。

ありがとう。

4

2 に答える 2

0

最終的なレイアウトをどのように見せたいかを理解しているかどうか、100% 確信が持てません。

ただし、線形レイアウトを使用した相対的なレイアウトは、「軽量」でありながら、目的に応じた目的の外観と機能を実現するように思えます。

目標を誤解した場合は申し訳ありませんが、その場合は質問をより明確にすることができます。

于 2012-09-29T04:00:14.237 に答える
0

このビットはあなたの問題だと思います:

marginBottom -= (dpi*28)+count;

ループスルーごとにマージンの量を変更しています。静的な値に設定するだけで、すべてのビューに同じマージンが必要です。

于 2012-09-29T04:01:11.743 に答える