我正在尝试1.创建一个for循环并随时随地创建文本视图2.创建了一个文本视图列表来保存所有文本视图3.最后添加约束,以使每个文本视图都在另一个视图之下。ConstraintSet.connect(textViewsList.get(i-1).getId(),ConstraintSet.TOP,textViewsList.get(i-2).getId(),ConstraintSet.BOTTOM,18);
无法实现步骤3。有人可以提供帮助吗?我是android开发的新手。
for(int i=1;i<=11;i++) {
ConstraintLayout rootView = (ConstraintLayout) findViewById(R.id.rootView);
TextView textView= new TextView(this);
textView.setText(numbersList.get(i-1));
id= ViewCompat.generateViewId();
textView.setId(id);
textViewsList.add(textView);
Log.v("NumbersActivity", "id : i = "+id+" "+i);
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(rootView);
Log.v("NumbersActivity", "cloned");
if(i!=1) {
Log.v("NumbersActivity", "textViewsList.get(i-1).getId()= " + textViewsList.get(i-1).getId() + "textViewsList.get(i-2).getId()= " + textViewsList.get(i - 2).getId());
constraintSet.connect(textViewsList.get(i-1).getId(), ConstraintSet.TOP, textViewsList.get(i - 2).getId(), ConstraintSet.BOTTOM, 18);
}
else{
Log.v("NumbersActivity", "textViewsList.get(i).getId()= " + textViewsList.get(i-1).getId());
Log.v("NumbersActivity", "rootView.getId()= " + rootView.getId());
constraintSet.connect(textViewsList.get(i-1).getId(), ConstraintSet.TOP, rootView.getId(), ConstraintSet.TOP, 18);
}
constraintSet.connect(textViewsList.get(i-1).getId(), ConstraintSet.LEFT, rootView.getId(), ConstraintSet.LEFT, 18);
Log.v("NumbersActivity", "Contraints set");
constraintSet.applyTo(rootView);
Log.v("NumbersActivity", "Applied to constraintSet");
rootView.addView(textView);
Log.v("NumbersActivity", "added to rootview");
}
尝试这样:
for(TextView tv : textViewsList) {
tv.setId(generateViewId()); // Views must have IDs in order to add them to chain later.
constraintLayout.addView(tv);
}
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(rootView);
View previousItem = null;
for(TextView tv : textViewsList) {
boolean lastItem =textViewsList.indexOf(tv) == textViewsList.size() - 1;
if(previousItem == null) {
constraintSet.connect(tv.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT);
} else {
constraintSet.connect(tv.getId(), ConstraintSet.TOP, previousItem.getId(), ConstraintSet.BOTTOM);
if(lastItem) {
constraintSet.connect(tv.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM);
}
}
previousItem = tv;
}