2012-11-21 21 views
1

我正在为我的大学开发一个关于在运行时自定义Android应用程序的项目。Android应用程序中可自定义的输入字段

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

我会尽力解释我的想法用下面的例子:

比方说,我有一个应用程序保存和显示的地址。所有地址都存储在数据库中。我在我的数据库中获得了“姓名”和“姓氏”字段,并在保存或显示地址时显示在应用程序中。

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

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

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

格尔茨

+0

可能重复:在Android中加载外部XML布局文件](http://stackoverflow.com/questions/6575965/theoretical-question-load-external-xml-layout-file-in-android) – PearsonArtPhoto

回答

1

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

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

重要由于性能原因,查看通货膨胀在很大程度上依赖于被在编译的时候做的XML文件的预处理。因此,在运行时,通过普通的XML文件使用LayoutInflater和XmlPullParser是不可能的。

但是,您可以在代码中动态创建布局,请参阅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线程中执行繁重的磁盘/任何网络访问。这应该在后台任务中完成。

0

非常感谢您的帮助。我会尽力解决这个问题。

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

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

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

顺便说一句,因为我不是一个软件工程师,我没有写任何代码,我只需要描述一种抽象的方式的概念.. :)

[理论问题的
相关问题