35

我目前正在做一个包含自定义警报对话框的 android 应用程序。它包含一个按钮,但我无法设置按钮的边距。代码如下。setmargin 方法不起作用

AlertDialog.Builder myDialog = new AlertDialog.Builder(Login.this);
Button button = new Button(Login.this);

button.setText("Send");
LayoutParams buttonLayoutParams 
    = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

button.setLayoutParams(buttonLayoutParams);

resetPassword=editText.getText().toString();

LinearLayout layout = new LinearLayout(Login.this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(textView);
layout.addView(editText);
layout.addView(button);

myDialog.setView(layout);
4

6 回答 6

70

编写下面的代码来设置边距,它可能会对你有所帮助。

AlertDialog.Builder myDialog = new AlertDialog.Builder(Login.this);
Button button = new Button(Login.this);
EditText editText = new EditText(Login.this);
TextView textView = new TextView(Login.this);
button.setText("Send");
LinearLayout.LayoutParams buttonLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonLayoutParams.setMargins(50, 10, 0, 0);
button.setLayoutParams(buttonLayoutParams);
String resetPassword = editText.getText().toString();
LinearLayout layout = new LinearLayout(Login.this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(textView);
layout.addView(editText);
layout.addView(button);
myDialog.setView(layout);
myDialog.show();

使用LinearLayout.LayoutParamsRelativeLayout.LayoutParams根据子视图的父布局

于 2012-06-16T09:22:35.460 回答
6

只是分享一个稍微不同的方法。

您可以只转换为 ,而不是转换为LinearLayout.LayoutParams,RelativeLayout.LayoutParamsMarginLayoutParams

转换MarginLayoutParams为更好,因为您可以稍后更新您的布局,并且您不需要返回到您的 java 代码来更改LinearLayouttoRelativeLayout或任何其他布局类型

您可以执行以下操作:

MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();

// Set bottom margin
layoutParams.bottomMargin = x;

// Set top margin
layoutParams.topMargin = x;

// Set left margin
// This won't have effect if you set any relative margin (start) previously or in the layout.xml
layoutParams.leftMargin = x;

// Set left margin
// This won't have effect if you set any relative margin (end) previously or in the layout.xml
layoutParams.rightMargin = x;

// Set start margin
layoutParams.setMarginStart(x);

// Set end margin
layoutParams.setMarginStart(x);

// Set all left, top, right, bottom margins at once
// Note that here, left and right margins are set (not start/end).
// So, if you have used start/end margin before (or via layout.xml), 
// setting left/right here won't have any effect.
layoutParams.setMargins(left, top, end, bottom)

// Then re-apply the layout params again to force the view to be re-draw
// This step may not be necessary because depending where you set the margin, 
// view is already scheduled to be drawn
// For any case, to ensure the view will apply the new margin, call:
view.setLayoutParams(layoutParams);
于 2019-06-26T15:59:59.177 回答
4
buttonLayoutParams.bottomMargin
buttonLayoutParams.topMargin
buttonLayoutParams.leftMargin
buttonLayoutParams.rightMargin

可用于设置边距

于 2012-06-16T09:18:27.130 回答
2

setMargin() 方法在您使用 LinearLayout.LayoutParams 时可用,但在您使用 ViewGroup.LayoutParams 时不可用。Dipak Keshariya 暗示了这一点,但并没有说太多。

于 2014-05-08T16:49:58.453 回答
2
You can set in LinearLayout margin

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);
于 2016-02-02T09:37:42.890 回答
0

这对我有用(支持库(需要使用 AndroidX):

科特林

val params = LinearLayoutCompat.LayoutParams(
               LinearLayout.LayoutParams.WRAP_CONTENT,
               LinearLayout.LayoutParams.WRAP_CONTENT
               ).apply {
                 setMargins(0,16,0,16)
               }

爪哇

LinearLayoutCompat.LayoutParams params = LinearLayoutCompat.LayoutParams(
                   LinearLayout.LayoutParams.WRAP_CONTENT,
                   LinearLayout.LayoutParams.WRAP_CONTENT
                   )
                   params.setMargins(0,16,0,16)
于 2021-08-06T02:53:01.503 回答