добавить ограничения, чтобы каждый текстовый вид находился один под другим - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь

  1. создать для l oop и создать текстовые представления на go.
  2. создал список текстовых представлений для хранения всего текста views.
  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");

    }

1 Ответ

0 голосов
/ 28 января 2020

Попробуйте вот так:

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.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP);
  } 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;
}

Ссылка

...