编程方式将按钮宽度设置为Parent Linearlayout的50%



我使用linearlayout创建了一个对话框,在此对话框中,我有一个按钮。我想将其宽度设置为对话框宽度的50%,但是无论我做什么,该按钮仍在填充整个宽度。主要问题似乎是我无法以编程方式设置按钮的重量。我尝试创建第二个水平线线层,该水平线线层将保持重量设置为0.5F的按钮(父级的权重为1),但这并没有更改任何内容。如何将按钮设置为宽度的一半?

我已经查看了所有其他问题,但是其中大多数都使用XML,因此它们与它们无关,并且以编程方式求解它的一个像素中使用了硬编码值,这显然是对问题的错误解决方案。p>编辑:添加一些代码

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);

当我尝试越来越多的选项时,代码变得一团糟。我决定从头开始,该代码最终有效:

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;

您是否也将宽度值设置为0dp?这是布局引擎分别自动使用布局权重所必需的。

编辑

我认为这条线会为您带来所需的结果:

LayoutParams buttonParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 0.5f);

查找对话框宽度

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);

最新更新