Java 使用OnClickListener更改LayoutParams?

Java 使用OnClickListener更改LayoutParams?,java,android,imageview,Java,Android,Imageview,我正在学习如何使用LayoutParams。关于设置布局参数,我有点不明白。这是我的密码: layout = findViewById(R.id.relative_layout); img = findViewById(R.id.img_view); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) img.getLayoutParams(); img.setOnClickListen

我正在学习如何使用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中传输它时,我需要再次设置布局参数?这背后的逻辑是什么?

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


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

请澄清一下,您的意思是Inner OnCreate()布局参数已经设置,当我在OnClickListener中更改它时,需要再次设置它?@Rkleer Yes。您有布局-
xml
-文件,已经定义了布局和布局参数。您只需获取对这些参数当前状态的引用,修改不会更改实际布局,只需获取参数的本地副本。通过再次在
RelativeLayout
上设置它们,可以应用这些更改和布局更改。