我想知道是否可以使用xml布局文件从代码中动态定义视图的内容。当我们启动一个活动时,我们将xml布局传递给方法调用setContentView(R.layout.main);
但是是否可以使用xml布局文件来定义动态创建的ViewGroup,例如LinearLayout?
我有一个布局xml,显示游戏的分数表。此屏幕上显示的每个分数都需要通过代码动态添加。我知道在代码中可以为此分数创建一个ViewGroup,并使用我需要的所有内容填充它,然后每次为每个分数执行此操作,然后将它们全部添加到现有UI中结构,已在xml布局中定义。我想知道的是,是否可以使用另一个xml文件来执行此操作?
例如,布局xml文件:
<LinearLayout android:id="@+id/top">
<LinearLayout android:id="@+id/column_heading"/>
</LinearLayout>
在另一个xml布局文件中类似于:
<LinearLayout android:id="@+id/row">
<TextView/>
<TextView/>
<TextView/>
<TextView/>
</LinearLayout>
在代码中我想做类似以下的事情:
LinearLayout top = (LinearLayout)findViewById(R.id.top);
for (int i = 0; i < num_of_rows; i++) {
LinearLayout row = new LinearLayout(this);
row.setContentView(R.layout.row); //where R.layout.row is the second layout above
// ... dynamically change values as needed
top.addView(row);
}
但是.setContentView(...)
不是LinearLayout的有效方法。还有另一种方法吗?我知道我可以通过代码完成所有工作,但这样做比较混乱,这种方式似乎非常整洁和合理..
答案 0 :(得分:2)
您应该使用LayoutInflater
。这是一个简短的例子
LinearLayout top = (LinearLayout)findViewById(R.id.top);
for (int i = 0; i < num_of_rows; i++) {
LayoutInflater inflater = LayoutInflater.from(this);
LinearLayout row = (LinearLayout)inflater.inflate(R.layout.row, null);
// ... dynamically change values as needed
top.addView(row);
}
答案 1 :(得分:1)
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.row, null);
答案 2 :(得分:1)
您可以使用LayoutInflater
的{{1}}方法从资源中扩展任意布局。如果为此方法提供根视图参数,则膨胀的布局将包含在其中。这样您就可以将XML视图扩展到您的行中。