当前位置: 首页 > 知识库问答 >
问题:

以编程方式更改约束布局的边距[重复]

郦祯
2023-03-14
class BundleItemView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {

  init {
    View.inflate(context, R.layout.item_product, this)
  }

  fun setProduct(product: Product) {
    /* change margin to 0 for this constraint layout */
    item_store_product_layout.leftPadding = dip(0)
    product_image.setImageURI(ImageUtil.getCellImageWithFallback(product))
    product_name.text = product.completeTitle
    product_sub_name_1.text = product.prettySizeString
    product_add_button.text = context.getString(R.string.view_details)

    product_regular_price_label.visibility = View.GONE
    product_regular_price_value.visibility = View.GONE
    product_price.setPrice(product.originalPrice)

    product_add_button.onClick {
      Toast.makeText(context, product.completeTitle, Toast.LENGTH_SHORT).show()
    }
  }

}
    item_store_product_layout.leftPadding = dip(0)

知道如何以编程方式改变约束布局的边距吗?

谢谢

共有1个答案

殳越
2023-03-14

边距与视图相关联,但属于ViewGroup,在您的情况下是ConstraintLayout。在ConstraintLayout.LayoutParams中更改边距

// view is the view to change margins for
val lp = view.layoutParams as ConstraintLayout.LayoutParams
lp.leftMargin = 200 // change to 200px
lp.topMargin = 200
lp.rightMargin = 200
lp.bottomMargin = 200
view.requestLayout() // May or may not be needed depending upon where the code is placed.

如果要更改连接,也可以使用ConstraintSet在ConstraintLayout中设置边距。

val cs = ConstraintSet()
cs.clone(layout) // layout is the ConstraintLayout
cs.connect(
    R.id.textView,
    ConstraintSet.START,
    ConstraintSet.PARENT_ID,
    ConstraintSet.START,
    200 // Start margins is now 200px
)
cs.applyTo(layout)

您正在将一些小部件的可见性设置为view.Gone,因此您可以使用Gone边距。

 类似资料:
  • 我在一个框架布局中有两个线性布局。 这里,我将id为的线性布局的设置为10dp,但在代码中,我想将这个10dp更改为50dp,在某些条件下,如何以编程方式更改这个top margine?

  • 我在通用应用程序的底部显示一个视图,并在视图中动态添加该视图。我希望每次都能像iAd一样在底部显示这个视图。在两个方向上。如何为此添加约束。请建议。 谢谢

  • 问题内容: 我正在尝试制作一个视图,该视图将作为一种“面板”,附加到视图控制器的右侧。 也就是说,它绑定到父视图控制器的尾部,顶部和底部边距,静态宽度为300 但是,我似乎无法正确解决问题,我要么打破约束,要么做某件事xcode告诉我是非法的。 我究竟做错了什么? 这是控制器中的代码 问题答案: 其实在你的代码的问题是,你没有设置的到,只要你想使用自动布局限制,那么你必须设置一个以虚假的。另一个问

  • 问题内容: 我正在尝试使用Java(不是XML)来创建一个LinearLayout,其线性按钮具有填满整个屏幕并具有边距的功能。这是不带边距的代码: 这样就可以了,但是到底如何给按钮留出一定的边距,以便在它们之间留出空间?我尝试使用,但是没有weight成员,所以不好。如果你lp在其构造函数中传递它,它也不起作用。 这不可能吗?因为它看起来确实可靠,而且它不是你只能使用XML进行的第一个Andro

  • 问题内容: 我想为对象设置动画,所以我声明一个约束并将其添加到视图中。然后,我在动画中更新约束的属性。为什么这段代码不移动对象? 问题答案: 为了声明动画,您不能重新定义约束并调用。您应该更改约束的,并遵循以下格式:

  • 问题内容: 我有一个,我使用Xcode Interface Builder设置了约束。 现在,我需要以编程方式更新该高度常数。 有一个类似的功能,但我不知道如何使用它。 问题答案: 从“界面”构建器中选择高度约束,然后选择其高度。因此,当您想更改视图的高度时,可以使用以下代码。 方法是的实例方法。以编程方式设置约束时,这将很有帮助。它更新视图的约束。有关更多详细信息,请单击此处。