添加约束,以便每个文本视图都在另一个视图下方

问题描述 投票:0回答:1

我正在尝试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");

        }
java android-studio android-constraintlayout constraint-programming
1个回答
0
投票

尝试这样:

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;
}

Reference

© www.soinside.com 2019 - 2024. All rights reserved.