Java android中动态加载xml布局的活动

Java android中动态加载xml布局的活动,java,android,android-activity,Java,Android,Android Activity,是否可以从设备中存储的资源(数据库或部分资源)加载活动的xml布局文件,并在活动启动时动态加载?其想法是通过web服务将其发送到设备。谢谢 是否可以从设备中存储的资源加载活动的xml布局文件 是。 View inflatedView = View.inflate(this, R.layout.sample, null); container.addView(inflatedView); 正如@Chirag Raval所说。 是否可以从db/web服务加载活动的xml布局文件 别这么想。因为从R

是否可以从设备中存储的资源(数据库或部分资源)加载活动的xml布局文件,并在活动启动时动态加载?其想法是通过web服务将其发送到设备。谢谢

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

是。

View inflatedView = View.inflate(this, R.layout.sample, null);
container.addView(inflatedView);
正如@Chirag Raval所说。

是否可以从db/web服务加载
活动的xml
布局文件

别这么想。因为从
R.layout.XPTO
调用的布局
reference(id)
,是预编译的。您不能在运行时添加值


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

示例:

Receive text, image, text + image

加载:
text\u block.xml
然后
image\u block.xml
然后
text\u和\u image\u block.xml

如果您试图膨胀构建过程中未包含的xml文件,我认为目前不可能。这是来自的java文档:

查看android.View.LayoutInflater.inflate(XmlPullParser, 视图组根,布尔值(附件)

从指定的XML节点展开新的视图层次结构。投掷 如果出现错误,则为充气异常

出于性能原因,视图通货膨胀严重依赖于 在构建时对XML文件进行预处理。因此, 当前无法将LayoutInflater与XmlPullParser一起使用 在运行时通过普通XML文件。


截至发帖之日,Android只包含一种内置的方式来膨胀APK文件中作为版面资源存储的版面XML。如果您想从其他源中膨胀类似(或不同)的XML,您必须自己实现,可能需要从
LayoutInflater
类中克隆一些逻辑。需要注意的是,Android在运行时做了大量工作来优化资源文件的读取和解析,因此如果您计划自己动态加载此文件,请准备让它膨胀得更慢。

如果您必须从数据库加载信息,它可能会帮助您创建基本的XML,并在其中插入信息,如表或类似的内容。您可以尝试以下方法:

在基本XML表中:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1"
android:id="@+id/SensorInfoTableLayout">

<TableRow>
    <TextView
            android:text="@string/sensor_name_title"
            android:padding="3dip" /> 
    <TextView
            android:text="@string/sensor_type_title"
            android:padding="3dip" />
    <TextView
            android:text="@string/sensor_value_title"
            android:padding="3dip" />
    <TextView
            android:text="@string/sensor_unit_title"
            android:padding="3dip" />
</TableRow>

<View
    android:layout_height="4dip"
    android:background="#FF909090" /></TableLayout>
在XML中,它只存在带有名称、标题、值和单位的主栏。从逻辑上讲,添加带有信息和样式的行

也许它有帮助,它对我有用。

不可能像其他答案中解释的那样“开箱即用”,但开源项目做出了巨大努力,提供了远程下载的基于Android原生XML的资源(HTTP)的呈现,类似于“原生Android”浏览器,本机基于Android的XML(而非HTML)和Beanshell脚本(而非JavaScript)


显然,性能将与本地预编译的本机资源不同。这类似于将web应用程序与桌面应用程序进行比较,web应用程序可以满足大多数需求,但不适合玩游戏,在Android中,本地/远程非常类似。

flipkart的同事为Android的LayoutInflater创建了一个替代品,它接受JSON,它可以托管在任何地方。它还接受可选数据,以便将数据绑定到本机视图

视图的JSON示例

{    
  "type": "LinearLayout",
  "orientation": "vertical",
  "padding": "16dp",
  "children": [{
    "layout_width": "200dp",
   "gravity": "center",
    "type": "TextView",
    "text": "@{user.profile.name}"
  }, {
    "type": "HorizontalProgressBar",
    "layout_width": "200dp",
    "layout_marginTop": "8dp",
    "max": 6000,
    "progress": "@{user.profile.experience}"
  }]
}
示例数据JSON:

{
  "user": {
    "profile": {
      "name": "John Doe",
      "experience": 4192
    }
  }
}
动态充气:通过将ProteusView包含在项目中来使用它:

ProteusView view = proteusLayoutInflater.inflate(<layout>, <data>);
container.addView(view.getAsView());
ProteusView=proteusLayoutInflater.充气(,);
container.addView(view.getAsView());
以下是作者本人的介绍:

请看这里:

我想你在第二个问题中写了一些话….
是否可以从db/web服务加载活动的xml布局文件。
如果有人有兴趣尝试这一点:有一个开源应用程序AnDroidDraw,它有一个简单的开始类。参考:-我可以发布一个稍微改进的,解析一些颜色,图像视图占位符。我想看看是否有人想在这方面做进一步的扩展。
ProteusView view = proteusLayoutInflater.inflate(<layout>, <data>);
container.addView(view.getAsView());