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,我需要设置布局参数了吗?这背后的逻辑是什么?

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

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

相关内容

最新更新