gpt4 book ai didi

android - Android 应用程序中的可自定义输入字段

转载 作者:行者123 更新时间:2023-11-30 03:54:58 24 4
gpt4 key购买 nike

我正在为我的大学开展一个关于在运行时自定义 Android 应用程序的项目。

是否可以包含实际上不在我的 android 项目的\res\layout\文件夹中但在外部网络服务器上的布局 XML 文件?这背后的想法是让我有机会在我的网络服务器上自定义 xml 文件,例如添加新字段,而无需重新安装/更新应用程序。

我将尝试用下面的例子来解释我的想法:

假设我有一个应用程序可以保存和显示地址。所有地址都存储在数据库中。我在数据库中获取了“姓名”和“姓氏”字段,并在保存或显示地址时显示在应用程序中。

现在我想添加第三个字段“电子邮件”,我可以在其中输入电子邮件地址。

我的想法是在我的数据库中创建这个字段并将其添加到我的网络服务器上的布局 xml 文件中。所以我可以在应用程序中“链接”xml 文件,刷新应用程序后会出现新字段。

希望你们能给我一些关于如何在运行时自定义我的输入表单的信息,我在互联网上的研究根本没有帮助我..

问候

最佳答案

您不能使用外部 XML 文件来动态调整布局。

LayoutInflater#inflate(XmlPullParser, ViewGroup) 的文档解释原因:

Important For performance reasons, view inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use LayoutInflater with an XmlPullParser over a plain XML file at runtime.

但是您可以在代码中动态创建您的布局,参见例如Android Runtime Layout Tutorial

因此,您可以在服务器上放置一个包含布局信息的文件,在您的应用中获取它,解析它并动态创建布局。这将需要大量工作,因为您基本上会复制 Android 的 LayoutInflater。您显然可以将格式简化为您需要的基础知识,但恕我直言,仍然需要做很多工作。

假设您的布局信息只是一个包含字段名称的纯文本文件

name
surname
email

然后您可以逐行阅读它并以如下方式为每行创建一个简单的 EditText

private View getDynamicLayout(ArrayList<String> lines) {
LinearLayout ll = new LinearLayout(this);
for (String line : lines) {
EditText et = new EditText(this);
// fill it with some text
et.setText(line);
ll.addView(ll);
}
return ll;
}

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<String> layoutConfig = readConfigFromFile();
View layout = getDynamicLayout(layoutConfig);
setContentView(layout);
}

但除非您真的需要它,否则我建议您以常规方式更新应用程序。使用预处理布局而不是自己构建该信息也更快。

同时注意不要像上例(读取文件)那样在 UI 线程中进行大量磁盘/任何网络访问。这应该在后台任务中完成。

关于android - Android 应用程序中的可自定义输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com