5

LinearLayout を使用してダイアログを作成しました。このダイアログにはボタンがあります。その幅をダイアログの幅の 50% に設定したいのですが、何をしても、ボタンはまだ幅全体を埋めています。主な問題は、ボタンの重みをプログラムで設定できないことです。重みが 0.5f に設定されたボタンを保持する 2 つ目の水平方向の LinearLayout を作成しようとしましたが (親の weightSum は 1 です)、何も変わりませんでした。ボタンを半分の幅に設定するにはどうすればよいですか?

私は他のすべての質問を見てきましたが、それらのほとんどはxmlを使用していたため、関連性がありませんでした。プログラムで解決したものは、ハードコードされた値をピクセル単位で使用していましたが、これは明らかに問題の不適切な解決策です.

編集:いくつかのコードを追加する

LinearLayout linearLayout = new LinearLayout(mContext);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setWeightSum(1);

// I use these params when I call addContentView
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

testButton = new Button(mContext);
testButton.setText("Test");
testButton.setId(1);
testButton.setWidth(0);
testButton.setGravity(Gravity.CENTER);

LinearLayout buttonLayout = new LinearLayout(mContext);
butonLayout.setOrientation(LinearLayout.HORIZONTAL);

LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.5f);
testButton.setLayoutParams(buttonParams);
buttonLayout.addView(testButton);

linearLayout.addView(buttonLayout);

...

this.addContentView(scrollView, layoutParams);
4

3 に答える 3

6

オプションをどんどん試していくと、コードがぐちゃぐちゃになりました。私は最初から始めることにしましたが、このコードは最終的に機能しました:

LinearLayout forButton = new LinearLayout(mContext);
forButton.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams forButtonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
forButton.setGravity(Gravity.CENTER);

DisplayMetrics dm = new DisplayMetrics();
this.getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;

forButton.addView(testButton);
testButton.getLayoutParams().width = width/2;
于 2012-10-25T15:21:19.860 に答える
4

幅の値も0dpに設定していますか?これは、レイアウト エンジンがそれぞれレイアウト ウェイトを自動的に使用するために必要です。

編集

この行で、探している結果が得られると思います。

LayoutParams buttonParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.5f);
于 2012-10-25T13:46:31.400 に答える
3

ダイアログの幅を見つけるには

DisplayMetrics dm = new DisplayMetrics();
     dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm);
    int width = dm.widthPixels ;

プログラムで値を設定するには

final LayoutParams lparams = new LayoutParams(Height,width/2); // Width , height
    final Button button = new Button(this);
    button.setLayoutParams(lparams);

編集

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();

lp.copyFrom(alertDialog.getWindow().getAttributes());
lp.width = 200;
lp.height = 200;
alertDialog.getWindow().setAttributes(lp);
于 2012-10-25T13:55:18.853 に答える