Вы можете добавлять представления динамически, но сначала вам нужна ссылка на родительское представление, к которому вы хотите добавить представление.
Вы можете сделать это, просто используя findViewById. Предполагая, что это линейное расположение,
LinearLayout parent = findViewById(R.id.parent);
// Then create a textview
TextView textView = new TextView(this);
// Add the view to the parent
parent.addView(textView);
И это все! Чтобы изменить свойства TextView, вы можете использовать методы получения и установки TextView. Если вы хотите изменить поля, отступы или высоту ширины TextView, используйте LayoutParams
// Remember that I'm using LinearLayout.LayoutParams because the parent of the ttextview is a LinearLayout
LinearLayout.LayourParams params = textView.getLayoutParams();
// Remember these values are in pixels
params.height = 100;
params.width = 200;
Существует множество проблем с использованием этого метода, например, установка высоты и ширины в пикселях вместо dps. И писать много кода, когда вы могли бы сделать это в XML. Однако вы можете сделать это намного проще, создав XML-файл в вашем res / layout, а затем накачав его и, наконец, добавив его к родительскому элементу.
Вы можете сделать это с помощью -
// First get the layout inflater
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TextView textView = inflater.inflate(R.layout.myTextView, null);
linearLayout.addView(textView);
Наконец, мы решили проблему с добавлением достаточного количества представлений, чтобы linearLayout не выходил за пределы ширины экрана.
Самое простое решение - циклически проходить по списку интересов и на каждой итерации цикла измерять общую ширину созданных TextViews, а затем проверять, превышает ли она ширину linearLayout.
Это будет выглядеть примерно так -
int combinedWidth = 0;
int linearLayoutWidth = linearLayout.getMeasuredWidth();
for(String interest : interests){
TextView view = inflater.inflate(R.layout.textview, null);
combinedWidth += textView.getMeasuredWidth();
view.setText(interest);
if(combinedWidth > linearLayoutWidth){
// No need to add more views
break;
}else{
linearLayout.addView(textView);
}
}
Однако приведенное выше решение может работать или не работать в зависимости от того, когда оно выполнено. Поэтому опубликуйте код активности вместе с файлом xml, чтобы я мог лучше ответить на ваш вопрос.