我想以编程方式更改togglebutton的约束,但我已经为xml文件中的togglebutton设置了约束。我需要的是当我点击togglebutton时我想覆盖togglebutton的约束,即当我点击在togglebutton1然后从togglebutton2的左侧添加约束,使用togglebutton3的左侧并且结果为0。
private ToggleButton toggleButton1;
private ToggleButton toggleButton2;
private ToggleButton toggleButton3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toggleButton1 = (ToggleButton) findViewById(R.id.toggleButton1);
toggleButton2 = (ToggleButton) findViewById(R.id.toggleButton2);
toggleButton3 = (ToggleButton) findViewById(R.id.toggleButton3);
CompoundButton.OnCheckedChangeListener compoundButton = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.constraintLayout);
ConstraintSet set = new ConstraintSet();
set.clone(constraintLayout);
set.connect(toggleButton3.getId(),ConstraintSet.LEFT,toggleButton2.getId(),ConstraintSet.LEFT,0);
set.applyTo(constraintLayout);
} else
// somecode
}
};
toggleButton1.setOnCheckedChangeListener(compoundButton);
}
希望有人帮助我
答案 0 :(得分:1)
我没有为您提供解决方案,但我可以向您展示一些令我信服的信息,即连接无法正确/向左,因为它的顶部/底部。将您的OnCheckedChangeListener
代码更改为以下代码并运行它。
CompoundButton.OnCheckedChangeListener compoundButton = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.constraintLayout);
ConstraintSet set = new ConstraintSet();
set.clone(constraintLayout);
if (isChecked) {
set.connect(toggleButton3.getId(), ConstraintSet.LEFT, toggleButton2.getId(), ConstraintSet.LEFT, 0);
} else {
set.connect(toggleButton3.getId(), ConstraintSet.BOTTOM, toggleButton2.getId(), ConstraintSet.BOTTOM, 0);
}
set.applyTo(constraintLayout);
}
};
首次点击toggleButton1时,您将看不到更改。当您再次单击它时,您应该看到toggleButton3跳转,使其底部与toggleButton2的底部对齐。 (确保它没有排成一行。)
您的问题可能与this bug report有关。
如果您确实找到了解决方案,那么您可以将其作为答案发布在此处,因为我已多次遇到此问题。
我希望有所帮助。
修改强>
您可以采取以下措施来解决此问题。使用ConstraintSet.START
和ConstraintSet.END
代替ConstraintSet.LEFT
和ConstraintSet.RIGHT
。我刚尝试过,它运作正常。我不能说为什么左右不能工作。