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

时间:2018-09-03 10:43:55

标签: 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);

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

我尝试使用newLayoutParams.setMargins(54, 54, 54, 0);左右放置边距,但是我仍然需要在上面放置边距。

6 个答案:

答案 0 :(得分:9)

最后,在@Aksh的帮助下,我发现了我的错误并解决了我的问题。如果有人发现它有用,我将在下面添加代码

     ConstraintLayout.LayoutParams newLayoutParams = (ConstraintLayout.LayoutParams) toolbar.getLayoutParams();
     newLayoutParams.topMargin = 0;
     newLayoutParams.leftMargin = 0;
     newLayoutParams.rightMargin = 0;
     toolbar.setLayoutParams(newLayoutParams);

答案 1 :(得分:0)

我曾经用ConstraintSet修改了ConstraintLayout来更改与之链接的元素。我还更改了该过程中的边距,该边距是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);

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

答案 2 :(得分:0)

您可能想尝试

ViewGroup.MarginLayoutParams params = yourConstraintLayout.getLayoutParams();
params.topMargin = x;
//others shows up in suggestion

我没有尝试过,尽管我认为它应该可以工作,因为ConstraintLayout是一个ViewGroup。

答案 3 :(得分:0)

对于layoutParams.setMargins(w, x, y, z)来说,它没有变化的原因是因为您很可能将方法接受的值视为Dp而不是Px。

要从Dp获取Px,您要使用:

int pxValue = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());

答案 4 :(得分:0)

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

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.displayMetric).toInt()
}

答案 5 :(得分:-2)

要像设置任何按钮一样设置边距,只需使用setX(float x)或setY(float y)相同的条件即可解决问题

Button bt= new Button(this);
bt.setX(20.0);
bt.setY(20.0);