Динамический TextView в относительной компоновке

Я пытаюсь использовать динамический макет для части комментариев моего проекта, но когда я устанавливаю текст textview динамически, вывод появляется только в верхней части экрана. И он выводит вывод на другие выходы

RelativeLayout ll=(RelativeLayout) findViewById(R.id.rl);
        for(int i = 0; i < 20; i++) {
        TextView cb = new TextView(this);
        cb.setText("YORUMLAR"+yorum[0]+i);

         cb.setTextSize(30);
          ll.addView(cb); 

        }

Итак, как я могу поместить вывод в нижней части экрана линейно.

Ответ 1

Вы должны использовать LinearLayout, чтобы автоматически добавить один TextView за другим.


Предполагая, что вы не можете жить без RelativeLayout, вам нужно динамически генерировать идентификаторы для всех созданных TextView, чтобы поместить одно представление под другое. Вот пример:

public class HelloWorld extends Activity
{       
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {       
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);

        RelativeLayout layout = (RelativeLayout)findViewById(R.id.layout);

        Random rnd = new Random();
        int prevTextViewId = 0;     
        for(int i = 0; i < 10; i++)
        {                       
            final TextView textView = new TextView(this);
            textView.setText("Text "+i);     
            textView.setTextColor(rnd.nextInt() | 0xff000000);            

            int curTextViewId = prevTextViewId + 1;
            textView.setId(curTextViewId);
            final RelativeLayout.LayoutParams params = 
                new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, 
                                                RelativeLayout.LayoutParams.WRAP_CONTENT);

            params.addRule(RelativeLayout.BELOW, prevTextViewId);
            textView.setLayoutParams(params);

            prevTextViewId = curTextViewId;
            layout.addView(textView, params);
        }              
    }    
}

enter image description here

Ответ 2

Вы должны указать местоположение вашего недавно добавленного представления. Как сказал @Adinia, без позиции, он по умолчанию будет выровнен по верхнему краю. Таким образом, вы можете использовать следующий код, чтобы сделать это с RelativeLayout;

RelativeLayout containerLayout = (RelativeLayout) findViewById(R.id.container);

for (int i = 0; i < 20; i++) {

    TextView dynaText = new TextView(this);

    dynaText.setText("Some text " + i);
    dynaText.setTextSize(30);

    // Set the location of your textView.
    dynaText.setPadding(0, (i * 30), 0, 0);

    containerLayout.addView(dynaText);
}

Если вы хотите показывать несколько текстовых просмотров один за другим, тогда вы должны пойти с LinearLayout.

Ответ 3

Вы также можете добавить динамическое текстовое представление в относительный макет. Здесь, когда я прикрепил код, это может вам помочь.

    RelativeLayout ll=(RelativeLayout) findViewById(R.id.rl);
    for(int i = 0; i < 20; i++) 
    {
       TextView cb = new TextView(this);
       cb.setText("YORUMLAR"+yorum[0]+i);
       cb.setTextSize(30);
       cb.setId(2000+i);
       RelativeLayout.LayoutParams TextViewLayoutParams = new RelativeLayout.LayoutParams(100,100);
       if (i != 0 )DispViewLayoutParams.addRule(RelativeLayout.BELOW, 2000 - (i-1));
       ll.addView(cb,TextViewLayoutParams); 
    }