使用 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 中时,我需要重新设置布局参数?这是什么逻辑?
您正在修改参数设置后。这意味着当前优化解决约束的解决方案不再有效,需要重新计算。通过更改这一约束,您的整个布局可能会发生变化。
通过再次在布局上设置布局参数,它正在解析并重新计算每个视图的新位置,包括您新添加的约束。只要您不调用重新计算方法,就会使用旧布局。
我正在学习如何使用 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 中时,我需要重新设置布局参数?这是什么逻辑?
您正在修改参数设置后。这意味着当前优化解决约束的解决方案不再有效,需要重新计算。通过更改这一约束,您的整个布局可能会发生变化。
通过再次在布局上设置布局参数,它正在解析并重新计算每个视图的新位置,包括您新添加的约束。只要您不调用重新计算方法,就会使用旧布局。