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

android应用程序中可自定义的输入字段,android,runtime,customizing,Android,Runtime,Customizing,我正在为我的大学做一个关于在运行时定制Android应用程序的项目 是否可以包含实际上不在android项目的\res\layout\文件夹中但在外部Web服务器上的布局XML文件? 这背后的想法是让我有机会在我的Web服务器上自定义xml文件,例如添加新字段,而无需重新安装/更新应用程序 我将尝试用以下示例来解释我的想法: 假设我有一个应用程序来保存和显示地址。所有地址都存储在数据库中。我在数据库中获得了“name”和“namite”字段,并在保存或显示地址时显示在应用程序中 现在我想添加第三

我正在为我的大学做一个关于在运行时定制Android应用程序的项目

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

我将尝试用以下示例来解释我的想法:

假设我有一个应用程序来保存和显示地址。所有地址都存储在数据库中。我在数据库中获得了“name”和“namite”字段,并在保存或显示地址时显示在应用程序中

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

我的想法是在数据库中创建此字段,并将其添加到Web服务器上的布局xml文件中。因此,我可以在应用程序中“链接”xml文件,并在刷新应用程序后显示新字段

希望你们能给我一些关于如何在运行时定制我的输入表单的信息,我在互联网上的研究根本帮不了我


Greetz

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

文件说明了以下原因:

重要出于性能原因,视图膨胀严重依赖于在构建时对XML文件进行的预处理。因此,目前不可能在运行时将LayoutInflater与XmlPullParser一起用于普通XML文件

但您可以在代码中动态创建布局,请参见

因此,您可以在服务器上放置一个保存布局信息的文件,在应用程序中获取它,解析它并动态创建布局。这将是一个很大的工作,因为你基本上要复制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);
}
private View getdynamicclayout(数组列表行){
LinearLayout ll=新的LinearLayout(本);
用于(字符串行:行){
EditText et=新的EditText(本);
//用一些文本填充它
et.setText(行);
ll.addView(ll);
}
返回ll;
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ArrayList layoutConfig=readConfigFromFile();
视图布局=getDynamicLayout(布局配置);
setContentView(布局);
}
但除非你真的需要,否则我建议你定期更新应用程序。使用预处理的布局也比自己构建信息更快


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

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

文件说明了以下原因:

重要出于性能原因,视图膨胀严重依赖于在构建时对XML文件进行的预处理。因此,目前不可能在运行时将LayoutInflater与XmlPullParser一起用于普通XML文件

但您可以在代码中动态创建布局,请参见

因此,您可以在服务器上放置一个保存布局信息的文件,在应用程序中获取它,解析它并动态创建布局。这将是一个很大的工作,因为你基本上要复制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);
}
private View getdynamicclayout(数组列表行){
LinearLayout ll=新的LinearLayout(本);
用于(字符串行:行){
EditText et=新的EditText(本);
//用一些文本填充它
et.setText(行);
ll.addView(ll);
}
返回ll;
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ArrayList layoutConfig=readConfigFromFile();
视图布局=getDynamicLayout(布局配置);
setContentView(布局);
}
但除非你真的需要,否则我建议你定期更新应用程序。使用预处理的布局也比自己构建信息更快


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

非常感谢您的帮助。我会努力度过难关的

我不能仅仅更新应用程序的原因是,我所说的应用程序实际上是许多不同公司使用的CRM系统。他们都必须从谷歌play商店下载相同的应用程序

我工作的目标是每个公司都可以自己定制他们的输入表单,因此可能有许多不同的输入表单(每个公司都有),但都使用相同的应用程序

我想到了一个服务器,它存储一个包含布局信息的文件,应用程序可以在运行时访问这些信息


顺便说一句,由于我不是一名软件工程师,我不需要编写任何代码,我只需要以抽象的方式描述这个概念:)

非常感谢你的帮助。我会努力度过难关的

我不能仅仅更新应用程序的原因是,我所说的应用程序实际上是许多不同公司使用的CRM系统。他们都必须从谷歌play商店下载相同的应用程序

前进