Android: Как позиционировать программно, программно созданные элементы в программно созданных макетах
Поэтому я пытаюсь создать этот глобальный раздел комментариев в своем приложении, и я понял, что должен загрузить комментарии в приложение, а затем создать элементы, которые будут содержать информацию. Я сделал все это, но теперь я не могу правильно расположить элементы. У меня есть ScrollView, который содержит LinearLayout
который содержит 3 LinearLayouts
(каждый из которых имеет ConstraintLayouts
). Итак, последний (третий) LinearLayout
пусто, когда программа загружается. При обнаружении нового комментария в базе данных новый комментарий ConstraintLayout
делается и добавляется в него. Тогда один ImageButton
и 2 TextViews
а затем добавил в ConstrainLayout
, Все, что создается после OnCreate
метод содержится в ArrayLists
, Вот что происходит, когда при извлечении кода появляется новый комментарий: когда ConstraintSet находится перед ConstraintLayout.LayoutParams, когда ConstraintSet находится после LayoutParams
и вот фактический код:
ConstraintLayout constraintLayout = new ConstraintLayout(getApplicationContext());
listNewConstraintLayouts.add(constraintLayout);
linearLayoutNewComments.addView(listNewConstraintLayouts.get(counterNewComs));
listNewConstraintLayouts.get(counterNewComs).setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
final float scale = getApplicationContext().getResources().getDisplayMetrics().density;
MyImageButton imageButton = new MyImageButton(getApplicationContext());
imageButtonsNewComments.add(imageButton);
listNewConstraintLayouts.get(counterNewComs).addView(imageButtonsNewComments.get(counterNewComs));
TextView tvComment = new TextView(getApplicationContext());
commTextViewsNewComments.add(tvComment);
listNewConstraintLayouts.get(counterNewComs).addView(commTextViewsNewComments.get(counterNewComs));
TextView tvName_Time = new TextView(getApplicationContext());
name_time_NewComments.add(tvName_Time);
listNewConstraintLayouts.get(counterNewComs).addView(name_time_NewComments.get(counterNewComs));
//And here comes the fun part
imageButtonsNewComments.get(counterNewComs).setLayoutParams(new ConstraintLayout.LayoutParams( (int) (70 * scale + 0.5f), (int) (70 * scale + 0.5f)));
name_time_NewComments.get(counterNewComs).setLayoutParams(new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT));
commTextViewsNewComments.get(counterNewComs).setLayoutParams(new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, ConstraintLayout.LayoutParams.WRAP_CONTENT));
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(listNewConstraintLayouts.get(counterNewComs)); //listNewConstraintLayouts.get(counterNewComs).getId()
constraintSet.connect(commTextViewsNewComments.get(counterNewComs).getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END,(int) (4 * scale + 0.5f));
constraintSet.connect(commTextViewsNewComments.get(counterNewComs).getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START,(int) (75 * scale + 0.5f));
constraintSet.connect(commTextViewsNewComments.get(counterNewComs).getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP,(int) (20 * scale + 0.5f));
constraintSet.connect(name_time_NewComments.get(counterNewComs).getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, (int) (75 * scale + 0.5f));
constraintSet.connect(name_time_NewComments.get(counterNewComs).getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, (int) (4 * scale + 0.5f));
constraintSet.connect(imageButtonsNewComments.get(counterNewComs).getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, 0);
constraintSet.connect(imageButtonsNewComments.get(counterNewComs).getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 0);
constraintSet.applyTo(listNewConstraintLayouts.get(counterNewComs));
/*imageButtonsNewComments.get(counterNewComs).setLayoutParams(new ConstraintLayout.LayoutParams( (int) (70 * scale + 0.5f), (int) (70 * scale + 0.5f)));
name_time_NewComments.get(counterNewComs).setLayoutParams(new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT));
commTextViewsNewComments.get(counterNewComs).setLayoutParams(new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, ConstraintLayout.LayoutParams.WRAP_CONTENT));*/
last_new_comment_id = rs.getLong(1);
counterNewComs++;
А вот как все должно быть:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<angelzani.com.test2project.MyImageButton
android:id="@+id/firstComImgButton10"
android:layout_width="70dp"
android:layout_height="70dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/firstComTextViewName10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="75dp"
android:layout_marginTop="5dp"
android:text="Name [Time]"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/firstComTextView10"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_marginStart="75dp"
android:layout_marginTop="30dp"
android:background="@drawable/real_comments_back"
android:fontFamily="sans-serif-condensed"
android:shadowColor="@color/text_shadow"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="1"
android:text="Comment"
android:textColor="@color/light_font"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Извините, если у меня много грамматических и орфографических ошибок:(Любая помощь приветствуется!