Android布局在运行时用另一个视图replace一个视图

我有一个xml布局文件主要包含两个textview A / B和一个视图C.比我有两个其他的xml布局文件option1option2 。 是否有可能在运行时加载option1option2通过Java到C? 如果是这样,我必须使用什么function?

您可以随时replace任何视图。

 int optionId = someExpression ? R.layout.option1 : R.layout.option2; View C = findViewById(R.id.C); ViewGroup parent = (ViewGroup) C.getParent(); int index = parent.indexOfChild(C); parent.removeView(C); C = getLayoutInflater().inflate(optionId, parent, false); parent.addView(C, index); 

如果你不想replace已经存在的视图 ,但是在初始化时select了option1 / option2,那么你可以做到这一点更简单:为父级布局设置android:id ,然后:

 ViewGroup parent = (ViewGroup) findViewById(R.id.parent); View C = getLayoutInflater().inflate(optionId, parent, false); parent.addView(C, index); 

您必须根据视图结构将“索引”设置为适当的值。 您也可以使用ViewStub :将您的C视图添加为ViewStub,然后:

 ViewStub C = (ViewStub) findViewById(R.id.C); C.setLayoutResource(optionId); C.inflate(); 

这样你就不必担心上面的“索引”值,如果你想重新构造你的XML布局。

如果您经常这样做,则可以使用ViewSwitcher或ViewFlipper来简化视图replace。