android - 在 Android 运行时从 xml 文件设置视图
问题描述
我正在尝试制作允许“加载”.xml 文件并将其显示为setContentView
新活动的视图的简单程序。基本上,我想要的是新活动的视图与我调用时相同
setContentView(R.layout.my_view)
R.layout.my_view
那个xml文件在哪里。但在我的情况下,该文件在编译时还不存在,应该动态加载(例如,从存储中)。
我想我可以解析我的 .xml 文件并通过代码动态构建视图,但这感觉就像在重新发明轮子,而且视图也很可能不会相同。我认为应该有一些简单的方法来做到这一点,但到目前为止我发现的所有方法都不是类似的问题(例如,
getResources().getXml(R.layout.my_view);
//or
LayoutInflater.from(context).inflate(R.layout.my_view, null) )
似乎需要该文件已经在编译时。有什么我想念的吗?
解决方案
正如你所描述的那样是不可能的。但是您可以通过 Java 代码来完成。
当我们在布局资源文件夹下创建布局 xml 文件并使用android:id="@+id/textview"
IDE 提供一些 ID 时,会生成一个 ID R.java 文件,其中包含我们分配的所有 ID。
当我们从 Activity 或 Fragment 调用该视图时,我们使用该 ID 创建一个对象,例如
TextView textview = (TextView) findViewById(R.id.textview);
和用户。
如果您想将 xml 代码表单存储或服务器加载为 xml 格式的计划文本。您将为您的视图分配一些 ID。但是 IDE 不会为此生成任何 ID。所以你不能创建它们的对象。
所以解决方案是您必须通过 Java 代码生成视图,这意味着以编程方式。
setContentView(R.layout.activity_main);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
width = width - (100/width)*80;
LinearLayout layout = (LinearLayout) findViewById(R.id.lo_dynamic_view_container);
LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
TextView tv = new TextView(this);
tv.setLayoutParams(lparams);
tv.setWidth(width);
float redious [] = { 0, 0, 8.3f, 8.5f, 8.2f, 8.9f, 0, 0 };
ShapeDrawable shape = new ShapeDrawable (new RoundRectShape(redious,null,null));
shape.getPaint().setColor(Color.GREEN);
tv.setBackground(shape);
layout.addView(tv);
这里的 activity_main.xml 将只有一个空的 LinearLayout 布局。您可以根据您的条件或指令文档表单存储或服务器生成视图并将它们添加到LinearLayout。
推荐阅读
- github - 将现有的 lambda 函数从 AWS 复制到 Github
- android - Android studio 一种用法被过滤掉了
- django - 如何从不同的模型访问多对多字段数据?
- python - 部分字符串匹配python,如Vlookup
- javascript - 循环中的Jquery ajax并在成功函数中分配ID
- integration - SagePay 服务器直接集成在所有情况下都返回 201
- excel - 将单元格与 IF 语句与第三个结果进行比较
- python - 如何在matplotlib plot的xlabel中打印10K、20K....1M
- jenkins - 管道语法:附加到现有文件而不使用 sh ""
- java - 在java swing中隐藏所有活动的工具提示