Android:如何通过代码向特定的布局中添加视图

25

我想动态地将一些视图添加到已在XML中定义的LinearLayout中。

我能够将视图添加到屏幕上,但它们未被放置在正确的LinearLayout内。

如何从代码获取对该特定布局的引用,类似于使用findViewById()获取View的方式?


1
如果您的视图没有出现在正确的LinearLayout中,那么这意味着您对它的引用有问题。请尝试检查是否以正确的方式(即通过XML文件中定义的唯一ID)按ID查找您的LinearLayout。没有代码,很难做出更多解释。 - Pentium10
3个回答

49

正如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,而ViewGroup本身又继承自View类。这使得获取布局的引用与获取其他视图的引用一样容易。


对我有用,谢谢!只是需要注意的是,在我的情况下,我正在使用水平方向,但每次添加新项目时,它不会出现。只有当我将方向更改为垂直时,新项目才会出现。 - Leonardo Costa

22

这应该可以正常工作:

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);

1
每次我重新加载活动时,新添加的视图都不会出现。我想知道如何将这些视图制作成一个“ViewGroup”,以便它们可以永久添加。谢谢。 - Shajeel Afzal

1
更好的版本: 在活动/片段中添加另一个布局
LayoutInflater mInflater = LayoutInflater.from(getActivity());
View mProgressBarFooter = mInflater.inflate(R.layout.spinner, null, false);
textLoader = (TextView) mProgressBarFooter.findViewById(R.id.footer_label);

快乐编程(-:


答案与问题有何关联? - KvdLingen
这就是我一直在寻找的。 - Tarun Deep Attri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接