以编程方式在 LinearLayout 中设置边距

新手上路,请多包涵

我正在尝试使用 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 布局任务。

原文由 Timmmm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 576
2 个回答

这是完成它的一些代码:

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

原文由 Mauro 发布,翻译遵循 CC BY-SA 3.0 许可协议

所以这很好用,但是你究竟如何给按钮留出边距以便它们之间有空间?

您在 LinearLayout.LayoutParams 对象上调用 setMargins()

我尝试使用 LinearLayout.MarginLayoutParams,但它没有重量成员,所以它不好。

LinearLayout.LayoutParamsLinearLayout.MarginLayoutParams 的子类,如 文档 中所示。

这不可能吗?

不。

这不是第一个只能用 XML 完成的 Android 布局任务

欢迎您提供此声明的证明。

就我个人而言,我不知道有什么只能通过 XML 而不能通过 SDK 中的 Java 方法来完成。事实上,根据定义,一切都必须通过 Java 来完成(尽管不一定通过 SDK 可访问的方法),因为 XML 不是可执行代码。但是,如果您知道某事,请指出,因为这是 SDK 中的错误,总有一天会得到修复。

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题