我在这里尝试的是,当单击addNewToDo 按钮时,应该将defaultEditText视图从 editText 视图转换为具有与 defaultEditText 相同的约束的复选框视图,并且我使用 Constraint.LayoutParams 这样做非常成功。
但我还想要的是,在单击按钮的同时,应该使用与前一个相同的属性(editText)创建一个 newEditText并放置在以编程方式创建的复选框的底部以及addNewToDo 按钮应该低于 newEditText
下面的代码成功,
创建具有预期属性的复选框。
创建一个具有正确宽度和高度的新 editText 视图。
约束新创建的editText下方的按钮。
失败,
约束已创建的复选框下方的 newEditText 视图
我得到的输出是,
newEditText 被放置在 UI 的左上角,我了解到如果没有正确约束,视图会被放置在那里
Button addNewToDo = findViewById(R.id.addNewToDo);
addNewToDo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox toDoCheckBox = new CheckBox(MainActivity.this);
toDoCheckBox.setText(defaultEditText.getText().toString());
toDoCheckBox.setTextSize(20);
toDoCheckBox.setId(View.generateViewId());
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) defaultEditText.getLayoutParams();
ConstraintLayout.LayoutParams newParams = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT,
ConstraintLayout.LayoutParams.MATCH_PARENT
);
newParams.width = params.width;
newParams.height = params.height;
newParams.startToStart = params.startToStart;
newParams.leftToLeft = params.leftToLeft;
newParams.topToTop = params.topToTop;
newParams.leftMargin = params.leftMargin;
newParams.topMargin = params.topMargin;
constraintLayout.addView(toDoCheckBox,-1,newParams);
defaultEditText.setVisibility(View.INVISIBLE);
//creating a new editText
EditText newEditText = new EditText(MainActivity.this);
newEditText.setWidth(defaultEditText.getWidth());
newEditText.setHeight(defaultEditText.getHeight());
newEditText.setId(View.generateViewId());
constraintSet.clone(constraintLayout);
constraintSet.connect(newEditText.getId(),ConstraintSet.START,toDoCheckBox.getId(),ConstraintSet.START);
constraintSet.connect(newEditText.getId(),ConstraintSet.END,toDoCheckBox.getId(),ConstraintSet.END);
constraintSet.connect(newEditText.getId(),ConstraintSet.TOP,toDoCheckBox.getId(),ConstraintSet.BOTTOM);
constraintSet.connect(addNewToDo.getId(),ConstraintSet.TOP,newEditText.getId(),ConstraintSet.BOTTOM);
constraintSet.applyTo(constraintLayout);
constraintLayout.addView(newEditText);
}
});
如何将 newEditText 约束到复选框?
仅供参考,我是在 ScrollView 中使用 ContraintLayout