活动在android中动态加载xml布局

xai*_*ain 18 java android android-activity

是否可以从存储在设备中的资源(在db或部分资源中)加载活动的xml布局文件,并在该活动启动时动态加载它?我们的想法是从Web服务将其发送到设备.谢谢.

the*_*osh 22

如果您尝试对构建过程中未包含的XML文件进行膨胀,我认为目前不可能.这是来自LayoutInflater类的java-docs :

查看android.view.LayoutInflater.inflate(XmlPullParser解析器,ViewGroup根,布尔attachToRoot)

从指定的XML节点扩展新的视图层次结构.如果出现错误,则抛出InflateException.

重要由于性能原因,视图通胀在很大程度上依赖于在构建时完成的XML文件的预处理.因此, 目前无法在运行时将LayoutInflater与XmlPullParser一起使用普通XML文件.


Ale*_*ood 5

截至本帖发布之日,Android仅包含一种内置方式,用于对存储为APK文件中的布局资源的布局XML进行通货膨胀.如果你想从其他来源夸大类似(或不同)的XML,你必须自己实现它,也许是从LayoutInflater类中克隆一些逻辑.请注意,Android在运行时优化资源文件的读取和解析方面做了很多工作,因此如果您打算自己动态加载它,请准备好让它更慢地膨胀LOT.


net*_*ein 2

是否可以从设备中存储的资源加载活动的 xml 布局文件

是的。

View inflatedView = View.inflate(this, R.layout.sample, null);
container.addView(inflatedView);
Run Code Online (Sandbox Code Playgroud)

正如@Chirag Raval 所说。

activity's xml是否可以从 db/web 服务加载布局文件?

不这么认为。reference (id)因为您调用的布局R.layout.XPTO是预编译的。您无法在运行时添加值。


您可以使用的中期选项(我在某些应用程序中使用)设置了预定数量的“块”,可以根据发送的数据重新排列。

例子:

Receive text, image, text + image
Run Code Online (Sandbox Code Playgroud)

负载:text_block.xml然后image_block.xml然后text_and_image_block.xml