如何动态地将ImageView对齐到Constraint Layout的中心?

5
我是一个有用的助手,可以为您翻译文本。

我正在尝试将图像视图对齐到约束布局的中心。我编写了以下代码,但它不起作用。

代码

int size = 150;
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(size, size);

layoutParams.bottomToBottom = ConstraintSet.PARENT_ID;
layoutParams.endToEnd = ConstraintSet.PARENT_ID;
layoutParams.startToStart = ConstraintSet.PARENT_ID;
layoutParams.topToTop = ConstraintSet.PARENT_ID;

circleImageView.setLayoutParams(layoutParams);

你能分享一下你的布局吗? - magicleon94
在创建新的constraintlayout.layoutparams时,您需要克隆先前的参数。同时,请确保您的imageview高度和宽度为0dp。 - Rahul
3个回答

11

约束布局 cLayout = findViewById(R.id.main_layout);

        TextView ev = new TextView(getApplicationContext());
        ev.setText(getString(R.string.not_found_name));
        ev.setTextSize(50);
        ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT,
                ConstraintLayout.LayoutParams.WRAP_CONTENT);

        layoutParams.bottomToBottom = ConstraintSet.PARENT_ID;
        layoutParams.endToEnd = ConstraintSet.PARENT_ID;
        layoutParams.startToStart = ConstraintSet.PARENT_ID;
        layoutParams.topToTop = ConstraintSet.PARENT_ID;

        ev.setLayoutParams(layoutParams);
        cLayout.addView(ev);

3
尝试使用ConstraintSet,您可以轻松地将视图以编程方式渲染到ConstraintLayout中心。
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView imageView = new ImageView(this);
    imageView.setImageResource(R.mipmap.ic_launcher);
    imageView.setId(R.id.imageview);

    ConstraintLayout myLayout = new ConstraintLayout(this);
    myLayout.setBackgroundColor(Color.BLUE);

    myLayout.addView(imageView);
    setContentView(myLayout);

    ConstraintSet set = new ConstraintSet();

    set.constrainHeight(imageView.getId(),
            ConstraintSet.WRAP_CONTENT);
    set.constrainWidth(imageView.getId(),
            ConstraintSet.WRAP_CONTENT);

    set.connect(imageView.getId(), ConstraintSet.LEFT,
            ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 0);
    set.connect(imageView.getId(), ConstraintSet.RIGHT,
            ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 0);
    set.connect(imageView.getId(), ConstraintSet.TOP,
            ConstraintSet.PARENT_ID, ConstraintSet.TOP, 0);
    set.connect(imageView.getId(), ConstraintSet.BOTTOM,
            ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 0);

    set.applyTo(myLayout);
}

3

在您的代码中:

ConstraintSet.PARENT_ID

这不是父约束布局的真实ID。您需要将其更改为:

R.id.myLayout

其中myLayout是您在*.xml文件中输入的内容:

android:id="@+id/myLayout"

这应该可以正常工作:

int size = 150;
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(size, size);

layoutParams.topToTop = R.id.myLayout;
layoutParams.bottomToBottom = R.id.myLayout;
layoutParams.leftToLeft = R.id.myLayout;
layoutParams.rightToRight = R.id.myLayout;
layoutParams.verticalBias = (float) 0.95;
layoutParams.horizontalBias = (float) 0.5;

circleImageView.setLayoutParams(layoutParams);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接