2010-08-13 2 views
19

Я хочу динамически добавлять некоторые виды в LinearLayout, которые уже определены в XML.Android: Добавить представление к определенному макету из кода

Я могу добавить виды на экран, но они не помещаются «внутри» справа LinearLayout.

Как я могу получить ссылку на этот конкретный макет из кода, аналогичный получению View с помощью findViewById()?

+1

Если вы в конечном итоге с видом не в праве LinearLayout, это означает, что у вас плохой ссылайтесь на него. Попробуйте проверить, правильно ли вы нашли свой линейный макет по id (иначе его уникальный идентификатор, определенный в файле XML). И без кода не так много можно сказать. – Pentium10

ответ

38

Как Marcarse отметил, что вы можете сделать

ViewGroup layout = (ViewGroup) findViewById(R.id.your_layout_id); 
TextView tv = new TextView(this); 
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
tv.setText("Added tv"); 
layout.addView(tv); 

Класс LinearLayout расширяет ViewGroup, который сам по себе расширяет класс View. Это позволяет получить ссылку на макет так же просто, как получить ссылку на другой вид.

+0

Используя ViewGroup, он отлично работает! – Erik

+0

Работает для меня, спасибо! Только примечание, в моем случае я использовал горизонтальную ориентацию, но каждый раз, когда я добавлял новый элемент, он не отображался. Только когда я изменил ориентацию на вертикальную, появился новый элемент. –

20

Это должно работать:

LinearLayout layout = (LinearLayout) findViewById(R.id.your_layout_id); 
TextView tv = new TextView(this); 
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
tv.setText("Added tv"); 
layout.addView(tv); 
+0

каждый раз, когда я перезаряжаю активность, новые добавленные представления не отображаются. Я хочу знать, как сделать эти представления в «ViewGroup» так, чтобы они были добавлены навсегда? Спасибо –

1

Лучше Версия: Чтобы добавить другую раскладку в деятельности/Фрагмент

LayoutInflater mInflater = LayoutInflater.from(getActivity()); 
View mProgressBarFooter = mInflater.inflate(R.layout.spinner, null, false); 
textLoader = (TextView) mProgressBarFooter.findViewById(R.id.footer_label); 

Днем Coding (-: