Как добавить массив TextViews в относительный макет, не перекрывая программно в Android? - PullRequest
1 голос
/ 29 марта 2019

Я ищу решение для решения моей проблемы, когда все мои TextViews накладываются друг на друга, когда добавляются в Relative Layout.На самом деле, мне нужно сделать их ставить после каждого.кроме того, я читал существующие ответы, я следовал за ними, но пока ничего не смогло их решить.Может кто-нибудь сказать мне, где я сделал неправильно?

вот мой код:

            for (int i=0;i<parts.length;i++)
        {
            valueTV[i] = new TextView(this);
            valueTV[i].setText(parts[i]);
            valueTV[i].setId(i);
            valueTV[i].setWidth(300);

            RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams
                    (RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                linearLayout_Skills.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
            }
            linearLayout_Skills.setBackgroundColor(getResources().getColor(R.color.blue));
            if(i>=1)
            {
                lparams.addRule(RelativeLayout.END_OF, valueTV[i-1].getId());
                valueTV[i].setLayoutParams(lparams);
            }else {
                lparams.addRule(RelativeLayout.ALIGN_PARENT_START);
                valueTV[i].setLayoutParams(lparams);
            }
            linearLayout_Skills.addView(valueTV[i]);


        }

XML-код:

                    <RelativeLayout
                        android:id="@+id/linearSkills"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layoutDirection="rtl"
                        android:paddingTop="5dp"            

                    </RelativeLayout>

1 Ответ

0 голосов
/ 29 марта 2019

Вы можете достичь этого, используя Relative layout

Итак, это основная идея, сначала определите макет отношений

  //layout variable is your relative layout
  RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  layout.setLayoutParams(layoutParams); 

Затем вы определяете переменную param следующим образом

  RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

После этого вы определяете свой textView с идентификатором (в вашем случае этот идентификатор может быть его позицией в массиве)

  TextView tv1 = new TextView(this);
  tv1.setId(1);
  tv1.setText("textView1");

Следующий textView будет объявлен следующим образом

  TextView tv2 = new TextView(this);
  params1.addRule(RelativeLayout.BELOW, tv1.getId());
  tv2.setId(2);
  tv2.setText("textView2");

Наконец, вы устанавливаете вид, используя параметры, которые вы определили

  layout.addView(tv2, params1);

Вот полный пример, который вы можете проверить ответ по @ AndiM

...