小编典典

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

all

我有一个xml带有两个文本视图 A/B 和一个视图 C 的 -layout 文件 main。我还有两个其他xml-layout
文件option1option2. 是否可以通过 Java 将其中一个option1option2在运行时加载到 C
中?如果是这样,我必须使用什么功能?


阅读 64

收藏
2022-07-29

共1个答案

小编典典

您可以随时替换任何视图。

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

如果您不想替换已经存在的 View ,而是在初始化时在 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 布局,您就不必担心高于“索引”值。

2022-07-29