1. ホーム

[解決済み】プログラムによるLinearLayoutのマージン設定

2022-03-31 12:34:52

質問

Javaを使おうとしているのですが、( XMLではない ) を使って、画面いっぱいにボタンを配置し、余白を持たせたLinearLayoutを作成しました。以下は、余白なしで動作するコードです。

LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
for (int r = 0; r < 6; ++r) {
    Button btn = new Button(this);
    btn.setText("A");

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
    lp.weight = 1.0f; // This is critical. Doesn't work without it.
    buttonsView.addView(btn, lp);
}

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setContentView(buttonsView, lp);

それで問題ないのですが、ボタンとボタンの間にスペースがあるようにするには、一体どうしたらいいのでしょうか?試しに LinearLayout.MarginLayoutParams しかし、これには weight のメンバーなので、ダメなんです。そして、それを lp をコンストラクタで呼び出すこともできます。

これは不可能なことなのでしょうか?というのも、確かにそう見えるし、XMLでしかできないAndroidのレイアウトタスクはこれが初めてではないでしょう。

どのように解決するのか?

以下は、それを実現するためのちょっとしたコードです。

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

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

layoutParams.setMargins(30, 20, 30, 0);

Button okButton=new Button(this);
okButton.setText("some text");
ll.addView(okButton, layoutParams);