android - 以编程方式将按钮宽度设置为父 LinearLayout 的 50%

标签 android android-layout android-linearlayout

我使用 LinearLayout 创建了一个对话框,在这个对话框中,我有一个按钮。我想将其宽度设置为 Dialog 宽度的 50%,但无论我做什么,按钮仍然填满整个宽度。主要问题似乎是我无法以编程方式设置按钮的权重。我尝试创建第二个水平 LinearLayout,它将保持按钮的权重设置为 0.5f(父级的 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);

最佳答案

随着我尝试了越来越多的选项,代码变得一团糟。我决定从头开始,这段代码最终起作用了:

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;

关于android - 以编程方式将按钮宽度设置为父 LinearLayout 的 50%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069882/

相关文章:

Android 在一个结果中自动完成多个 textview 行

android - iText bytearray 没有提供可行的输出

Android Studio 不会将布局从横向更改为纵向

android - 如何在 android (java/xml) 中创建基本的滑动面板

android - marginTop 和 marginBottom 不适用于 LinearLayout

android - 如何解决 sdk 17 和 18 之间列表项布局行为变化的变化?

android - 建立Android Studio项目时发生逾时错误

android - 在android中支持多种屏幕尺寸和旋转

android - 如何在Android中制作具有物理效果的布局?

android - LinearLayout 中的 RelativeLayout?