繁体   English   中英

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

[英]Programmatically set margin to 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); 这将向左和向右放置边距,但我仍然需要在它上面放置边距。

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

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

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

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()
}

我曾经用 ConstraintSet 修改了一个ConstraintSet来改变它所链接的元素。 我还更改了该过程中的边距,这是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);

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

你可能想试试

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

我还没有尝试过,但我相信它应该可以工作,因为 ConstraintLayout 是一个 ViewGroup。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM