以编程方式将边距设置为ConstraintLayout

Ass*_*nov 9 android android-constraintlayout

在不同情况下,我需要更改由ConstraintLayout构成的工具栏的边距.我试着按照以下方式做到这一点

ConstraintLayout.LayoutParams newLayoutParams = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
ConstraintLayout.MarginLayoutParams layoutParams = new ConstraintLayout.MarginLayoutParams(newLayoutParams);
layoutParams.setMargins(0, 0, 0, 0);
toolbar.setLayoutParams(newLayoutParams);
Run Code Online (Sandbox Code Playgroud)

但在第二种情况下 layoutParams.setMargins(16, 16, 16, 16); 它并没有改变.所以,有人可以给出其他方式或指出错误.感谢您花时间解决我的问题.

我试图左右使用 newLayoutParams.setMargins(54, 54, 54, 0);这个看跌期权,但我仍然需要在它上面加上保证金.

Ass*_*nov 20

最后在@Aksh的帮助下,我发现了我的错误并解决了我的问题.如果有人发现它有用,我会把我的代码放在下面

     ConstraintLayout.LayoutParams newLayoutParams = (ConstraintLayout.LayoutParams) toolbar.getLayoutParams();
     newLayoutParams.topMargin = 0;
     newLayoutParams.leftMargin = 0;
     newLayoutParams.rightMargin = 0;
     toolbar.setLayoutParams(newLayoutParams);
Run Code Online (Sandbox Code Playgroud)

  • 如果它不起作用,很可能是因为布局未与父级 `constraintSet.connect(testButton.id, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START)` 连接 (2认同)

Tob*_*kan 9

在约束布局中为视图添加边距的好方法

val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayoutId)
val marginTop = context.getDimension(10f)
constraintSet.setMargin(R.id.tv_user, ConstraintSet.TOP, marginTop)
constraintSet.applyTo(constraintLayoutId)

fun Context.getDimension(value: Float): Int {
    return TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, value, this.resources.displayMetrics).toInt()
}
Run Code Online (Sandbox Code Playgroud)


Nor*_*ert 8

我曾经用 a 修改了 ConstraintLayoutConstraintSet以更改它所链接的元素。我还更改了该过程中的边距,这是该connect方法的最后一个参数:

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(layout);
constraintSet.connect(
    R.id.layout_id, 
    ConstraintSet.START, 
    R.id.layout_id2, 
    ConstraintSet.END, 
    8);
constraintSet.applyTo(layout);
Run Code Online (Sandbox Code Playgroud)

也许这会给您另一个提示以找到解决方案?