用于动态布局的XML解析器(动态加载的皮肤)

时间:2011-02-23 15:16:59

标签: android

我想编写一个应用程序,其中(至少目前)内容始终相同,但是在运行时根据用户首选项动态加载布局。基本上我希望应用程序应用一个看起来与其他皮肤完全不同的“皮肤”。

我找到了一些使用SAXparser的教程: http://www.androidpeople.com/android-xml-parsing-tutorial-using-saxparser/ http://twigstechtips.blogspot.com/2010/12/android-how-to-parse-xml-string.html 并且可以想象从头开始编写可识别所有标准xml布局标签的东西,然后动态加载布局的每个部分。但这是从头开始做的很多工作!当然这个功能在android中可用,或者肯定有人编写了一些开源代码,可以在你的活动onCreate方法的开头运行,它接收一个xml文件并设置你的布局?

我在这里发现了一个类似但令人不满意的回答问题: How to create a layout file programmatically 这让我觉得,因为setContentView必须将整数resourceID作为其参数,所以这些在编译时预先烘焙的事实可能是个问题。 (setContentView也可以将View对象作为其参数,但我不想要大量的if语句并逐个传递每个View对象,我想要一些输入xml文件或xml字符串的代码并设置内容查看。)

也许我离开了轨道。还有另一种方法吗?我认为拥有动态加载皮肤的应用程序的能力非常重要。

谢谢!

3 个答案:

答案 0 :(得分:2)

我有类似的要求并尝试了相同的方法 - 它不起作用。

文档清楚地说明了这一点:http://developer.android.com/reference/android/view/LayoutInflater.html

<强>更新

由于OP需要加载在运行时创建的XML布局:

可能这样做,通过创建XML布局文件,将它们复制到虚拟项目,创建.apk然后将apk加载到设备上。

然后可以使用

DexClassLoader在apk中加载类。

答案 1 :(得分:0)

好吧,安卓为你付出了艰苦的努力,但没有完成任何工作......

首先,你必须忘记解析xml布局...而你可以制作骨架布局,管理他内在的孩子的位置,大小等......然后用LayoutInflater膨胀那个'骨架'xml并获得一个查看实例...

当您拥有该View实例时,您可以使用它执行您想要的操作,应用用户首选项,例如背景,前景色,位置,大小等......

也许我不明白你的问题,但你可以在编译时从xml资源中获取任何视图,然后应用其他样式或设置其他属性

答案 2 :(得分:0)

似乎无法加载布局&amp;根据doc:

动态更改皮肤
  

因此,目前无法在运行时对普通XML文件使用带有XmlPullParser的LayoutInflater;它只适用于从编译资源(R.something文件)返回的XmlPullParser。

http://developer.android.com/reference/android/view/LayoutInflater.html