XML动态创建
Posted
技术标签:
【中文标题】XML动态创建【英文标题】:XML dynamic creation 【发布时间】:2012-09-18 08:05:24 【问题描述】:我想动态创建一个 XML 布局,但对此我有疑问。
假设我有这样的东西(从“大纲”的角度看布局):
-滚动视图
---线性布局(垂直)(LL1)
-------线性布局(水平)(LL2)
-----------图像视图(IV1)
-----------线性布局(垂直)(LL3)
---------------TextView
---------------TextView
所以我的问题是我会从最内部的布局 (LL3) 开始并添加 2 个 TextView,然后向上分支(到 LL2,然后是 LL1,然后是 ScrollView)并添加到其他视图和布局?
【问题讨论】:
【参考方案1】:我相信您可以通过多种方式做到这一点。我没有尝试过动态创建这样的整个层次结构,但我已经多次以这种方式添加按钮、单选按钮、文本视图和其他视图。在这些情况下,我刚刚使用AddView()
将新的添加到已经存在的那些中。
我认为最简单的方法是“自上而下”地创建它,即首先创建 ScrollView
并添加任何设置,然后向下添加其他视图。我通常会这样做:
// Call other methods to create the views first:
ScrollView myScrollView = createMainScrollView();
LinearLayout myHorizontalLayout = createLinearLayoutForAbc();
LinearLayout myOtherLayout = createLinearLayoutForXyz();
TextView myFirstTxt = (...)
(..etc..)
现在以正确的方式填充它们:
myScrollView.addView(myHorizontalLayout);
myHorizontalLayout.addView(myOtherLayout);
(..etc..)
注意:
我确实相信这应该有效,但我不能保证;如果在添加到外部视图后对内部视图的引用不再正确(例如,myHorizontalLayout
不再是对myScrollView
下实际视图的有效引用),您可能无法将子级添加到那个内心的看法。不过,不确定这一点。
(如果是这样,您可能在添加每个视图后尝试使用findViewByName()
获取新的正确引用,但我认为这不是最佳解决方案)。
我会先尝试第一种方法 - 至少做一个概念证明,看看您可以在至少三层深的层次结构中添加视图。那应该会给你答案。如果它确实 not 工作,我想我会尝试以相反的顺序添加它们,正如你在你的问题中建议的那样,只是为了看看它是否有效(也许只是在我的第二个代码块中切换顺序? )。
抱歉回答的不准确,希望对你有所帮助。
【讨论】:
以上是关于XML动态创建的主要内容,如果未能解决你的问题,请参考以下文章