使用 OnClickListener 更改 LayoutParams?

Changing LayoutParams with an OnClickListener?

我正在学习如何使用 LayoutParams。关于设置布局参数,我有些不明白。这是我的代码:

 layout = findViewById(R.id.relative_layout);
    img = findViewById(R.id.img_view);
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) img.getLayoutParams();

    img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            params.addRule(RelativeLayout.CENTER_IN_PARENT);

            img.setLayoutParams(params); //Setting LayoutParams?

        }
    });

如果我将这段代码直接放在OnCreate() 方法中,它可以正常工作,但是为什么当我将它传递到OnClickListener 中时,我需要重新设置布局参数?这是什么逻辑?

您正在修改参数设置后。这意味着当前优化解决约束的解决方案不再有效,需要重新计算。通过更改这一约束,您的整个布局可能会发生变化。

通过再次在布局上设置布局参数,它正在解析并重新计算每个视图的新位置,包括您新添加的约束。只要您不调用重新计算方法,就会使用旧布局。