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

标签 android xml android-layout view

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

最佳答案

您可以随时替换任何 View 。

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

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

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

这样,如果您想重新构建 XML 布局,就不必担心高于“索引”值。

关于Android布局在运行时用另一个 View 替换 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3334048/

相关文章:

android - 错误 :Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease' while generating APK

java - 我可以对具有 'Z' 和 '+1:00' 后缀的日期使用一种 SimpleDateFormat 模式吗?

java - 如何在java类中获取图层列表项ID?

java - 从 Android SDK 模拟器的外部存储读取文件

java - Android: ListView 的 android:dividerHeight 的默认值是多少

java - OnTouch 返回 "false"但触摸事件未传递到基础 View

Android Studio - Android Emulator 以不同方式呈现布局。模拟器运行程序时高度似乎变小了

android - 如何在 Android 上自定义 facebook 登录屏幕?

python - 使用 Python 解析大型 xml 文件 - etree.parse 错误

xml - 使用 XSD 的可追溯性