如何在约束布局中动态生成的视图上添加dp中的边距

时间:2018-04-03 11:53:46

标签: android android-layout constraints android-constraintlayout

我在约束布局中从xml添加了2个视图,现在我需要在从xml创建的视图下面添加新视图

这是我添加新视图的方法

//leftMargin calculation
int topMargin= Utils.pxToDp(20);
ImageView imageView = new ImageView(this);
imageView.setId(View.generateViewId());
constraintLayout.addView(imageView);

ConstraintSet set = new ConstraintSet();
set.clone(constraintLayout);
set.constrainWidth(imageView.getId(), ConstraintSet.MATCH_CONSTRAINT);

set.connect(imageView.getId(), ConstraintSet.TOP, eventsViewPager.getId(), ConstraintSet.BOTTOM, topMargin);

我在这里定义了边距20dp,但它只是在视图上添加了一条细线,如果我使用400左右的边距,那么它会给我想要的结果,转换时一定有一些错误可能是我在这里制作。

这就是我将值从px转换为dp

的方式
public static int pxToDp(int px){
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

1 个答案:

答案 0 :(得分:1)

我认为您应该将DP转换为像素,而不是反之亦然,请使用TypedValue,如下所示:

int marginTopDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, 
                              getResources().getDisplayMetrics());